gpt4 book ai didi

sql - 如何理解 PostgreSQL 中的 to_number 格式

转载 作者:行者123 更新时间:2023-11-29 12:23:57 25 4
gpt4 key购买 nike

根据我对 formatting documentation 的阅读,我没有从 PostgreSQL 的函数“to_number”中得到预期的行为.所以我可能读错了。有人可以对此进行解释,以便我知道在其他类似情况下会发生什么吗?

-- I find this intuitive:
# select to_number( '12,345.67', '99999.999') ;
to_number
-----------
12345.67

-- I find this surprising:
# select to_number( '12,345.67', '99999.99') ;
to_number
-----------
12345.6

-- EDIT: I found this surprising new variation:
# select to_number( '12,345.67', '999999.99') ;
to_number
-----------
12345.67

为什么我最后的百分之一数字在第二种情况下被丢弃了?

编辑:看来这个问题与四舍五入或我的格式中小数点右侧出现的位数无关。相反,问题与格式包含的字符总数有关,因此与解析的字符总数有关。我认为最终的完整答案会因发布的 mu 太短而略有不同。

在实践中,我总是可以返回比我认为需要的更多的数字。但这不是很令人满意。它可能有一天会咬我。注意:这不是格式中“9”与“0”的问题。它们在 to_number 中的行为相同,我觉得这有点令人惊讶……但在上面的链接中有清楚​​的记录。

最佳答案

问题是您的“数字”有一个逗号作为千位分隔符,但您的模式没有。将它们垂直排列以使比较更容易:

12,345.67
99999.99
^

我们看到该模式正在寻找一个数字,但它找到了一个逗号。您的模式与您使用的字符串不完全匹配,因此您会得到意想不到的结果。

如果您将分隔符添加到您的模式中(请参阅文档中的 Table 9.26: Template Patterns for Numeric Formatting),那么您将得到您要查找的内容:

=> select to_number('12,345.67', '99,999.99');
to_number
-----------
12345.67
(1 row)

关于sql - 如何理解 PostgreSQL 中的 to_number 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51901043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com