Bre*_*ias 2 t-sql sql-server sql-server-2008
不出所料,我不能这样做:
SELECT
SUM( t.MyField IS NULL ) AS totalNulls,
SUM( t.MyField LIKE '[0-9]') AS totalNumbers
FROM MyTable AS t;
Run Code Online (Sandbox Code Playgroud)
我不知道为什么这些不起作用,因为SQL中的布尔值只是数字(0和1).但是我得到的错误表明,在select子句中的任何地方都有'is null'或'like'是不合法的.他们为什么不在那里合法?如上面的(伪)SQL所建议的,我如何达到预期的效果?
SQL Server不知道布尔是什么.BIT <>布尔值,虽然这是一个常见的误解.您也无法在SELECT语句中执行控制流程(例如IF).在下一版本的SQL Server中,我们获得了内联IIF()功能,这种功能可以满足您的需求.在此期间,您需要使用CASE表达式.
SELECT
totalNulls = SUM(CASE WHEN t.MyField IS NULL THEN 1 ELSE 0 END),
totalNumbers = SUM(CASE WHEN t.MyField LIKE '[0-9]' THEN 1 ELSE 0 END)
FROM MyTable AS t;
Run Code Online (Sandbox Code Playgroud)