gpt4 book ai didi

sql - 从特定列中查找小数位数

转载 作者:行者123 更新时间:2023-11-29 13:47:12 28 4
gpt4 key购买 nike

我有一个表,我想在其中找到特定列中的小数位数,我只想获取小数点后两位以上的记录

我正在尝试:

SELECT amount    
FROM fin_payment_scheduledetail where amount ilike '%._____'

错误:

operator does not exist: numeric ~~* unknown

最佳答案

从你的错误中我看到了数字数据类型,因此示例:

t=# with f(l) as (values(3.092::numeric),(0),(0.2),(9.000))
select l,position('.' in l::text),char_length(l::text), char_length(l::text)-position('.' in l::text) dug2more from f;
l | position | char_length | dug2more
-------+----------+-------------+----------
3.092 | 2 | 5 | 3
0 | 0 | 1 | 1
0.2 | 2 | 3 | 1
9.000 | 2 | 5 | 3
(4 rows)

9.000 被认为在点后有 3 个数字,这在数学上是错误的(因为它不是三 - 它是零,或者三或四十二 - 所有这些都不相等,因此说它三是废话)

因此,为了算术,我要添加一个更明确的转换:

t=# with f(l) as (values(3.092::numeric::float),(0),(0.2),(9.000))
select l,position('.' in l::text),char_length(l::text), char_length(l::text)-position('.' in l::text) dug2more
from f;
l | position | char_length | dug2more
-------+----------+-------------+----------
3.092 | 2 | 5 | 3
0 | 0 | 1 | 1
0.2 | 2 | 3 | 1
9 | 0 | 1 | 1
(4 rows)

最后关于使用正则表达式:

t=# with f(l) as (values(3.092::numeric),(0),(0.2),(9.000))
select l,l::text ~ '\d{1,}.\d{2,}' from f;
l | ?column?
-------+----------
3.092 | t
0 | f
0.2 | f
9.000 | t
(4 rows)

如您所见,在 9.000 的情况下比较是正确的。所以这取决于你在这里想要什么 - 算术一的语义检查

关于sql - 从特定列中查找小数位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46426412/

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