Sql 空值中断搜索
我在查询中有以下WHERE语句,但是如果DateOfBirth为NULL,它不会返回记录的结果。我似乎无法理解这一点,不知道是否有人能理解原因Sql 空值中断搜索,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在查询中有以下WHERE语句,但是如果DateOfBirth为NULL,它不会返回记录的结果。我似乎无法理解这一点,不知道是否有人能理解原因 WHERE ( EXISTS( -- if we have words SELECT * FROM #SearchWords s WHERE ((@SearchType = 'FirstName
WHERE
(
EXISTS( -- if we have words
SELECT *
FROM #SearchWords s
WHERE
((@SearchType = 'FirstName' OR @SearchType = 'ALL') AND c.FirstName LIKE CONCAT (s.Word,'%'))
OR ((@SearchType = 'LastName' OR @SearchType = 'ALL') AND c.LastName LIKE CONCAT(s.Word,'%'))
OR ((@SearchType = 'PreferredName' OR @SearchType = 'ALL') AND c.PreferredName LIKE CONCAT(s.Word,'%'))
OR ((@SearchType = 'Password' OR @SearchType = 'ALL') AND c.Password LIKE CONCAT(s.Word,'%'))
OR ((@SearchType = 'IdentifierValue' OR @SearchType = 'ALL') AND CI.IdentifierValue LIKE CONCAT(s.Word,'%'))
)
OR @SearchWordCount = 0 --if we don't have words
)
AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
您可以简单地使用
或表达式:
AND
(DateOfBirth IS NULL OR
DateOfBirth BETWEEN COALESCE(@LowerDate, DateOfBirth) AND COALESCE(@UpperDate, DateOfBirth)
)
哪里可以缩短
WHERE
( @SearchType in ('FirstName', 'ALL')
AND c.FirstName LIKE CONCAT (s.Word,'%') )
OR ( @SearchType in ('LastName', 'ALL')
AND c.LastName LIKE CONCAT(s.Word,'%') )
OR ( @SearchType in ('PreferredName', 'ALL')
AND c.PreferredName LIKE CONCAT(s.Word,'%') )
OR ( @SearchType in ('Password', 'ALL')
AND c.Password LIKE CONCAT(s.Word,'%'))
OR ( @SearchType in ('IdentifierValue', 'ALL')
AND CI.IdentifierValue LIKE CONCAT(s.Word,'%'))
@LowerDate
和@UpperDate
是否可以NULL
?作为一个注释很有趣,但与OP提出的当DateOfBirth
为NULL
时查询无法返回结果的问题无关。