格式化查询以在 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 查询以在 HTML 中显示数据

转换SQL datetime以在输入类型datetime local中显示

SQL:根据 B 列中的布尔值更改 SELECT 查询以在 A 列上显示不同的值

如何设置让Oracle SQL Developer显示的时间包含时分秒

如何查询oracle表的操作日志记录