如何在 Oracle 中精确地 select 数字
How to select numbers with precision in Oracle
我有一个查询,在某些列中,它 returns 数字,例如 1、2、3 等,但我需要将它们分别显示为 1,00、2,00、3,00 ,我怎样才能实现呢?我试过了
CAST(2 as FLOAT(2))
和
ROUND(2, 2)
但这些都不起作用。我也试过使用to_char
,但我不明白如何使用掩码。
假设您的目标是 select 一个表示数字的字符串,并且您始终希望显示 2 个小数位,并且该字符串要遵守会话的 NLS 小数点分隔符设置(无论是那是逗号或句号)
select to_char( <<the number>>, '0D99' )
from <<your table>>
如果数字小于 1,这也会打印前导 0。如果您不需要前导 0,请使用“9D99”格式掩码
根据您对分隔符的要求设置您的nls_numeric_characters。使用 TO_CHAR 格式化输出。
SQL> alter session set nls_numeric_characters=',.';
Session altered.
SQL> WITH DATA(num) AS(
2 SELECT 1 FROM dual UNION ALL
3 SELECT 2 FROM dual UNION ALL
4 SELECT 3 FROM dual
5 )
6 SELECT to_char(num, '9D99') FROM DATA;
TO_CH
-----
1,00
2,00
3,00
SQL>
我有一个查询,在某些列中,它 returns 数字,例如 1、2、3 等,但我需要将它们分别显示为 1,00、2,00、3,00 ,我怎样才能实现呢?我试过了
CAST(2 as FLOAT(2))
和
ROUND(2, 2)
但这些都不起作用。我也试过使用to_char
,但我不明白如何使用掩码。
假设您的目标是 select 一个表示数字的字符串,并且您始终希望显示 2 个小数位,并且该字符串要遵守会话的 NLS 小数点分隔符设置(无论是那是逗号或句号)
select to_char( <<the number>>, '0D99' )
from <<your table>>
如果数字小于 1,这也会打印前导 0。如果您不需要前导 0,请使用“9D99”格式掩码
根据您对分隔符的要求设置您的nls_numeric_characters。使用 TO_CHAR 格式化输出。
SQL> alter session set nls_numeric_characters=',.';
Session altered.
SQL> WITH DATA(num) AS(
2 SELECT 1 FROM dual UNION ALL
3 SELECT 2 FROM dual UNION ALL
4 SELECT 3 FROM dual
5 )
6 SELECT to_char(num, '9D99') FROM DATA;
TO_CH
-----
1,00
2,00
3,00
SQL>