Sql 如何构造WHERE子句以基于此特定条件提取记录?

Sql 如何构造WHERE子句以基于此特定条件提取记录?,sql,sql-server,null,where-clause,Sql,Sql Server,Null,Where Clause,我使用的是SQLServer2014,我有一个针对特定表(t1)运行的T-SQL查询。 表t1包括名为[HR\u LeftDate]、[Payroll\u LeftDate]和[Status]的3列 在该表中,有些记录的[HR_LeftDate]和[Payroll_LeftDate]为“NULL”,有些记录的[HR_LeftDate]和[Payroll_LeftDate]为空(两列均为空) 我需要提取这些记录,我的T-SQL查询如下: SELECT * FROM [t1] WHERE ([HR_

我使用的是
SQLServer2014
,我有一个针对特定表(t1)运行的
T-SQL
查询。 表
t1
包括名为[HR\u LeftDate]、[Payroll\u LeftDate]和[Status]的3列

在该表中,有些记录的[HR_LeftDate]和[Payroll_LeftDate]为“NULL”,有些记录的[HR_LeftDate]和[Payroll_LeftDate]为空(两列均为空)

我需要提取这些记录,我的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子句将可空值设置为空字符串,并进行如下比较:

从[t1]中选择*
其中ISNULL([HR_leftDate],“”)=''和ISNULL([Payroll_leftDate],“”)=''
和[状态]=“左”

AND运算符的值高于
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')

作为一个重要注意事项(如注释中所述),请始终使用适当的
date
time
数据类型存储日期和时间值。

向我们展示一些示例表数据和预期结果-全部为格式化文本(而不是图像)记住这一点,然后在或之前。你们是将日期存储为文本吗?我确信这只是一种奇怪的操作检查方式,它是
1900-01-01
@TimBiegeleisen@TimBiegeleisen,我不能说,因为我只能访问一个视图来提取我的数据。不要将日期存储为字符串。就这么简单,我怀疑这就是“答案”,尽管OP首先不应该将日期存储为文本。