我有一个SQL服务器数据库非常大的表,我想所有在那里小数列的值有一个小数部分> 0如何获得列(小数)小数部分的值大于0的所有行?
例如行我有两行:
"John Smith", 123.00
"Mary", 123.05
我的查询应该只换句话说返回"Mary", 123.05
所以它应该返回 看起来像这样X.0000所有行.... 1到X.9999999999 ...
我需要这个,看看我其实需要将我的列作为小数。
我有一个SQL服务器数据库非常大的表,我想所有在那里小数列的值有一个小数部分> 0如何获得列(小数)小数部分的值大于0的所有行?
例如行我有两行:
"John Smith", 123.00
"Mary", 123.05
我的查询应该只换句话说返回"Mary", 123.05
所以它应该返回 看起来像这样X.0000所有行.... 1到X.9999999999 ...
我需要这个,看看我其实需要将我的列作为小数。
您可以使用FLOOR()
来做到这一点。如果数字本身大于其值,则它必须有一个小数。
Select Name, Number
From Table
Where Number > Floor(Number)
如何:
WHERE my_column > FLOOR(my_column)
您可以在WHERE子句中使用ROUND
功能。
SELECT name, number
FROM yourtable
WHERE (ROUND(number,0)-number) != 0
输出:
SQL小提琴:
可以使用的模本。
- EDIT--
删除了关于此方法的SARGability的错误陈述。
declare @Something table
(
SomeName varchar(20),
SomeValue numeric(9,2)
)
insert @Something
select 'John Smith', 123.00 union all
select 'Mary', 123.05
select *
from @Something
where SomeValue % 1 > 0
只是一句话:这只是使用了精密的数据类型(十进制)时,工作可靠,而近似数据类型(FLOAT,DOUBLE)可能会报告那里有没有,反之亦然小数。但是,无论如何,FLOAT和DOUBLE很少用在数据库中。 –
除了'FLOOR'外,你也可以尝试模:'WHERE col M%OD 1 <> 0' – dnoeth