我如何构建我的 WHERE 子句以根据此特定条件提取记录?

How do I construct my WHERE clause to pull records based on this specific criteria?

我正在使用 SQL Server 2014,并且我有一个针对特定 Table (t1) 的 T-SQL 查询 运行。 Table t1 包括名为 [HR_LeftDate]、[Payroll_LeftDate] 和 [Status].

的 3 个列

在 table 中,有些记录的 [HR_LeftDate] 和 [Payroll_LeftDate] 为 'NULL',而其他一些记录的空白(对于两列)。

我需要提取这些记录,我的 T-SQL 查询如下:

SELECT *
FROM [t1]
WHERE ([HR_leftDate] IS NULL AND  [Payroll_leftDate] IS NULL )
   OR ([HR_leftDate] = '' AND  [Payroll_leftDate] = '') AND [Status] = 'Left'

我过滤 [HR_LeftDate] 和 [HR_PayrollDate] 的 WHERE 子句中一定有问题,因为我没有得到那些特定的记录。

如有任何帮助,我们将不胜感激。

您可以应用 ISNULL 子句将可为空的值设为空字符串并进行如下比较:

SELECT * FROM [t1]
WHERE ISNULL([HR_leftDate],'') = ''  AND ISNULL([Payroll_leftDate],'') = ''
AND [Status] = 'Left'

AND 运算符的 precedence 高于 OR 运算符,因此您可能需要更改 WHERE 子句:

SELECT * 
FROM [t1]
WHERE 
   (
      ([HR_leftDate] IS NULL AND [Payroll_leftDate] IS NULL) OR
      ([HR_leftDate] = '' AND  [Payroll_leftDate] = '') 
   ) AND 
   ([Status] = 'Left')

您当前的 WHERE 条款适用于以下条件:

WHERE 
   ([HR_leftDate] IS NULL AND  [Payroll_leftDate] IS NULL) OR 
   ([HR_leftDate] = '' AND  [Payroll_leftDate] = '' AND [Status] = 'Left')

作为重要说明(如评论中所述),始终使用适当的 datetime 数据类型存储日期和时间值。