sql - 十进制数、to_char 和 Oracle

标签 sql oracle

我试图找出一个 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,这是不行的。

你有什么建议吗?

最佳答案

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

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

这个例子不是很好 - 不清楚你的数据是否会有像 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

它会自动观察小数点分隔符。根据您的数字大小调整 secodn 格式模式。

关于sql - 十进制数、to_char 和 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2033756/

相关文章:

sql - 为什么当我在 sql 中使用 <> 时它没有得到空值

sql - 有什么地方可以提交 SQL 代码并让网站显示图形吗?

mysql - SQL 查询 : Getting the top five tuples based on a value where the value could be the same for some tuples

sql - 通过对表中的数据进行分组来创建新表

sql - 性能差异大 : Using sysdate vs using pre-formatted date

sql - 最佳实践 : Oracle SQL Joins

sql - 如果我们只对第一个匹配的子行感兴趣,如何优化 Oracle 中的 JOIN?

sql - 当行计数大于 1.000.000 时,Oracle APEX 呈现数据的速度变慢

oracle - 使用Microsoft ODBC for Oracle连接Oracle数据库还需要安装Oracle Client吗?

mysql - 如何修复 "invalid syntax for integer : ' NUM'