Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 空值中断搜索_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 空值中断搜索

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语句,但是如果DateOfBirth为NULL,它不会返回记录的结果。我似乎无法理解这一点,不知道是否有人能理解原因

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
时查询无法返回结果的问题无关。