查找特定列的小数

时间:2017-09-26 12:20:24

标签: sql regex postgresql postgresql-9.3

我有一个表,我想在特定列中找到no.of十进制位,我只想获得有超过2位小数的记录

我正在尝试这个:

A save request with PNG and filename should appear when running this code...
<canvas id=c></canvas>

ERROR:

  

运算符不存在:numeric ~~ * unknown

1 个答案:

答案 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的情况下比较是正确的。所以它取决于你想要的东西 - 算术的语义检查