如果您的數據沒有被索引的查詢欄,你應該使用基於案例的解決方案阿龍建議,因爲該行纔會被查詢一次。
select totalNulls = sum(case when MyField is null then 1 else 0 end),
totalNumbers = sum(case when MyField like '[0-9]' then 1 else 0 end)
from MyTable;
你應該知道你只接受例如在這種情況下,'7'作爲數字不是'12'。 如果你想接受任何號碼,你應該去問
... when MyField not like '%[^0-9]%' ...
在這種情況下,你可以使用ISNUMERIC做一個魅力:
select totalNonNumbers = count(*) - sum(isnumeric(MyField)),
totalNumbers = sum(isnumeric(MyField))
from MyTable;
如果列索引的邁克爾斯解決方案的變化可能是最快的:
select totalNulls = (select count(*) from MyTable where MyField is null),
totalNumbers =
(select count(*) from MyTable where MyField between '0' and '9');
有這麼多的方法...
布爾在ANSI SQL不是* 0和1.這可能是在某些品牌的RDBMS中實現的副作用,但在SQL語言中不是這樣。 –
MyField列的數據類型是什麼? –