格式化查询以在 Oracle SQL 中显示浮点小数
Posted
技术标签:
【中文标题】格式化查询以在 Oracle SQL 中显示浮点小数【英文标题】:Format query to show floating decimal in Oracle SQL 【发布时间】:2020-04-06 16:33:04 【问题描述】:我正在使用 Oracle SQL Developer,并且我有一个查询,其中一列有一个数值,我想除以 1,000,000,然后显示以显示逗号和最多 10 个小数位(如果计算值有任何小数位) .我目前正在使用这个查询:
to_char(value/1000000, 'FM999,999,990.9999999999') as Millions_Value
上面的格式给了我逗号并保留了我想要的小数位数,但不幸的是它也在整数的末尾添加了一个小数点。
例子:
值/1000000 = 33993
格式化值 = 33,993。
我想要的 = 33,993
对于十进制值,我得到我想要的并且需要保持格式
例子:
值/1000000 = 0.158739
格式化值 = 0.158739
值/1000000 = 10.82
格式化值 = 10.82
还有关于如何去掉整数小数点的想法?
【问题讨论】:
有点相关question。 【参考方案1】:最简单的方法是使用 RTRIM,例如
RTRIM(to_char(value/1000000, 'FM999,999,990.9999999999'), '.') as Millions_Value
将删除任何尾随句点。
编辑
如果你想变得花哨和国际化,你需要查询 NLS_SESSION_PARAMETERS 来获取小数分隔符,在格式字符串中使用 G(组)和 D(小数)说明符,然后剪掉任何尾随的小数分隔符。或者换句话说:
WITH cteData AS (SELECT 123456789.123456789 AS N FROM DUAL UNION ALL
SELECT 123 FROM DUAL),
cteDecimalSeparator AS (SELECT SUBSTR(VALUE, 1, 1) AS DECIMAL_SEPARATOR
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_NUMERIC_CHARACTERS')
SELECT TO_CHAR(N, 'FM999G999G990D9999999999') AS OLD_FORMAT,
RTRIM(TO_CHAR(N, 'FM999G999G990D9999999999'), s.DECIMAL_SEPARATOR) AS NEW_FORMAT
FROM cteData d
CROSS JOIN cteDecimalSeparator s
返回
OLD_FORMAT NEW_FORMAT
123,456,789.123456789 123,456,789.123456789
123. 123
记住:没有什么比杀戮更过分的杀戮 :-)
【讨论】:
【参考方案2】:就个人而言,我认为带有一个尾随 0 看起来不错,因此将格式字符串转换为小数点后的 0。但是要回答您的问题,我认为您只需要在转换数字后对其进行修剪即可:
SELECT TRIM(TRAILING '.' FROM TO_CHAR('345676', 'FM999G999G990D9999999999'))
FROM DUAL;
【讨论】:
以上是关于格式化查询以在 Oracle SQL 中显示浮点小数的主要内容,如果未能解决你的问题,请参考以下文章
以在 Oracle 和 SQL Server 中获得最佳性能为目标的数据建模
转换SQL datetime以在输入类型datetime local中显示
SQL:根据 B 列中的布尔值更改 SELECT 查询以在 A 列上显示不同的值