我有一个双精度值的列。我试图只选择精度大于十分之一的那些(例如,24.13,1.347等)。
我知道我可以使用以下内容将float转换为字符串并基于字符串长度进行查询:
select * from schema.table where char_length(to_char(float_column, 'FM999999999D999999999')) > 3;
这将返回小数位数超过1的所有行如果该数字的整数部分是单个数字(例如,它将返回24.1)。
如何选择mitissa长度大于1的任何浮点值?
答案 0 :(得分:1)
Use split_part()
:
with my_table(float_column) as (
values
(24.13::float), (1.347), (12345), (.1)
)
select float_column, split_part(float_column::text, '.', 2)
from my_table;
float_column | split_part
--------------+------------
24.13 | 13
1.347 | 347
12345 |
0.1 | 1
(4 rows)
So your query may look like this:
select *
from my_table
where length(split_part(float_column::text, '.', 2)) > 1;
float_column
--------------
24.13
1.347
(2 rows)
答案 1 :(得分:0)
如果您将值存储为numeric
(固定点与浮点),那么您可以这样做:
where floor(col * 100) <> floor(col * 10) * 10
不幸的是,有一些边缘情况,这个逻辑对浮点数不起作用,因为你可以得到像21.99999999997这样的东西。
答案 2 :(得分:0)
look for rounding errors:
where round(float_column,1) <> round(float_column,5)