我有一个表,我想在特定列中找到no.of十进制位,我只想获得有超过2位小数的记录
我正在尝试这个:
A save request with PNG and filename should appear when running this code...
<canvas id=c></canvas>
ERROR:
运算符不存在:numeric ~~ * unknown
答案 0 :(得分:0)
从你的错误我看到数字数据类型,因此例如:
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)
最后关于使用regexp:
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的情况下比较是正确的。所以它取决于你想要的东西 - 算术的语义检查