2015-10-26 76 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,但模數當然不是一個函數,它是一個表達式。 –

相關問題