小编典典

十进制数,to_char和Oracle

sql

我试图找出to_char()的格式规范,这将给我以下结果。

to_char(0.1, '[FORMAT_SPEC]')

给出0.1并:

to_char(1, '[FORMAT_SPEC]')

给出1。

我尝试了以下解决方案:

to_char(0.1)

给出“ .1”。

to_char(0.1, 'FM0.099')

给出0.1,这是可以的,但是:

to_char(1, 'FM0.099')

给出1.0,这不行。

你有什么建议吗?


阅读 196

收藏
2021-04-28

共1个答案

小编典典

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

CASE 
  WHEN INSTR(TO_CHAR(t.col), '.') = 0 THEN TO_CHAR(t.col)
  ELSE TO_CHAR(t.col, 'FM0.099')
END

该示例不是很好-尚不清楚您的数据是否将具有1.000或大于1 / etc的值。

编辑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

它会自动观察小数点分隔符。使secodn格式模式适合您的数字大小。

2021-04-28