在http://msdn.microsoft.com/en-us/library/ms190276.aspx检查运算符优先级
'AND' 在 'OR' 之前被评估,因此您的示例如下所示:
SELECT COUNT(col1)
FROM table
WHERE
LEN(col2) > 1 OR LEN(col3) > 1 OR ( LEN(col4) > 1 AND col1 = '1' )
这是一个相当开放的选择。你说:
我想计算没有值的记录
但是您的代码正在计算具有值的记录。所以也许你想要这个:
SELECT COUNT(col1)
FROM table
WHERE col1 = '1' AND
( col2 IS NULL
OR col3 IS NULL
OR col4 IS NULL
)
当您说:
其中 LEN(col2) > 0
但如果 col2 为 NULL,则 LEN(col2) 也为 NULL。不为零。
如果您的字符串是 '' 而不是 NULL,那么您可以检查长度:
SELECT COUNT(col1)
FROM table
WHERE col1 = '1' AND
( LEN(col2) = 0
OR LEN(col3) = 0
OR LEN(col4) = 0
)
当然,如果您确实打算查看非空值:
SELECT COUNT(col1)
FROM table
WHERE col1 = '1' AND
( LEN(col2) > 0
OR LEN(col3) > 0
OR LEN(col4) > 0
)
同样在您的示例中,您说 LEN() > 1。您的意思是大于 1 还是零?