选择子句中的布尔逻辑

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所建议的,我如何达到预期的效果?

Aar*_*and 6

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)