sql - NULL 值破坏搜索
问题描述
我在查询中有以下 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)
解决方案
您可以简单地使用OR
表达式:
AND
(DateOfBirth IS NULL OR
DateOfBirth BETWEEN COALESCE(@LowerDate, DateOfBirth) AND COALESCE(@UpperDate, DateOfBirth)
)
推荐阅读
- sql - 将所有空列(非空值为零的列)移动到表的最右侧
- c# - 如何拯救这个任务?
- java - 即使对象是 TypeSafe 对象,Findbugs 也会抛出错误 BC_UNCONFIRMED_CAST_OF_RETURN_VALUE
- datatables - DataTables - 基于时间跨度的过滤
- html - 使用 XSL 样式表从 XML 生成 PDF 时显示页码(其 HTML 输出)
- html - HTML、CSS 中的数据语句
- c# - 遍历任何属性、嵌套对象和列表 C#
- .net - SQL Server 的数据库加密
- python - python tkinter Toplevel() 中的滚动条显示但不滚动
- java - 将字母数字字符串转换为数字和字符串映射时生成的空映射