十进制数,to_char和Oracle

Ari*_*iod 4 sql oracle

我试图找出to_char()的格式规范,它会给我以下结果.

to_char(0.1, '[FORMAT_SPEC]')
Run Code Online (Sandbox Code Playgroud)

给出0.1和:

to_char(1, '[FORMAT_SPEC]')
Run Code Online (Sandbox Code Playgroud)

给出1.

我尝试过以下解决方案:

to_char(0.1)
Run Code Online (Sandbox Code Playgroud)

给'.1'.

to_char(0.1, 'FM0.099')
Run Code Online (Sandbox Code Playgroud)

给出0.1,这没关系,但是:

to_char(1, 'FM0.099')
Run Code Online (Sandbox Code Playgroud)

给出1.0,这是不行的.

你有什么建议吗?

OMG*_*ies 5

返回的精度需要保持一致,因此唯一的选择是使用DECODECASE语句有条件地返回您需要的内容:

CASE 
  WHEN INSTR(TO_CHAR(t.col), '.') = 0 THEN TO_CHAR(t.col)
  ELSE TO_CHAR(t.col, 'FM0.099')
END
Run Code Online (Sandbox Code Playgroud)

这个例子并不是很好 - 不清楚你的数据是否具有类似1.000值或者等于一个/等的值.

编辑Michael-O(2013-06-25):对于那些需要它的人,你可以试试:

case
  when instr(to_char(<col>), (select to_char(0, 'FMD') from dual))  = 0
    then to_char(<col>) 
  else to_char(<col>, 'FM999990D999')
end
Run Code Online (Sandbox Code Playgroud)

它会自动观察小数分隔符.将secodn格式模式调整为您的数字大小.