Ber*_*eSF 12 sql sql-server sql-server-2008
我有一个SQL表,其中一个浮点列填充了以下值:
1.4313
3.35
2.55467
6.22456
3.325
Run Code Online (Sandbox Code Playgroud)
我需要选择仅包含超过4位小数的值的行.在这种情况下,select必须返回:
2.55467
6.22456
Run Code Online (Sandbox Code Playgroud)
想法?谢谢!
这是我到目前为止所尝试的
select *
from table
where CAST(LATITUDE AS DECIMAL(10,5)) - LATITUDE = 0
Run Code Online (Sandbox Code Playgroud)
Unh*_*ean 18
DECLARE @tbl TABLE (val float)
INSERT INTO @tbl SELECT 1234.567
INSERT INTO @tbl SELECT 1234.5678
INSERT INTO @tbl SELECT -1234.5678
INSERT INTO @tbl SELECT 1234.56789
SELECT *
from @tbl
where (((abs(val)*10000) - CONVERT(INT,(abs(val)*10000))) <> 0)
Run Code Online (Sandbox Code Playgroud)
为什么我们不能通过这个查询简化: -
SELECT * FROM table WHERE val LIKE '%.____%'
Run Code Online (Sandbox Code Playgroud)
这选择了我们想要的
给出的答案对 MaxDb 不起作用,但这样做了:
where FLOOR(value * 10000) != value * 10000
Run Code Online (Sandbox Code Playgroud)
减少/增加 0 以降低/提高精度。
另一种解决方案也是:
SELECT * from table
where (round(value,2) - round(value,4) <> 0)
Run Code Online (Sandbox Code Playgroud)
这适用于 Postgres 11:
SELECT * FROM mytable WHERE mycolumn != ROUND(mycolumn::numeric,2)
Run Code Online (Sandbox Code Playgroud)