2015-10-26 42 views
1

我有一个SQL服务器数据库非常大的表,我想所有在那里小数列的值有一个小数部分> 0如何获得列(小数)小数部分的值大于0的所有行?

例如行我有两行:

"John Smith", 123.00 
"Mary", 123.05 

我的查询应该只换句话说返回"Mary", 123.05所以它应该返回 看起来像这样X.0000所有行.... 1到X.9999999999 ...

我需要这个,看看我其实需要将我的列作为小数。

+2

只是一句话:这只是使用了精密的数据类型(十进制)时,工作可靠,而近似数据类型(FLOAT,DOUBLE)可能会报告那里有没有,反之亦然小数。但是,无论如何,FLOAT和DOUBLE很少用在数据库中。 –

+0

除了'FLOOR'外,你也可以尝试模:'WHERE col M%OD 1 <> 0' – dnoeth

回答

1

您可以使用FLOOR()来做到这一点。如果数字本身大于其值,则它必须有一个小数。

Select Name, Number 
From Table 
Where Number > Floor(Number) 
1

如何:

WHERE my_column > FLOOR(my_column) 
1

您可以在WHERE子句中使用ROUND功能。

SELECT name, number 
FROM yourtable 
WHERE (ROUND(number,0)-number) != 0 

输出:

SQL小提琴:

2

可以使用的模本。

- 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 
+1

SARGable? 'modulo'没有功能吗?并使用哪个索引? – dnoeth

+1

注意事项 - 如果数据类型是FLOAT,这将不起作用。 'FLOAT'(和'INT',但'INT'在这种情况下是不相关的)与'modulo'运算符不兼容。 – Siyual

+0

@dnoeth也许你是正确的,它仍然是nonSARGable,但模数当然不是一个函数,它是一个表达式。 –

相关问题