您好我有以下类型的查询:
Select a,b from tab1 whre tab1.id in
(Select id from tab2 where x=1 and y=2 and z>getdate())
现在z是tab2中的日期时间列,它是可以为空的列。所以我想要检查z> getdate()仅当它不为null时。 已检查Conditional WHERE clause in SQL Server但无法准确执行。基本上我不希望'z'列检查上面的查询,如果它在tab2中为null。
提前致谢。
答案 0 :(得分:2)
你的意思是:
Select a,b from tab1 where tab1.id in
(Select id from tab2 where x=1 and y=2 and (z is null or (z is not null and z>getdate())))
答案 1 :(得分:1)
我认为您需要AND和OR运算符的组合。组合这些时,您需要了解operator precedence。在我的例子中,我使用括号来确保一起检查x,y和z,然后分别重新检查z。查询返回检查块1或2为真的任何记录。
在我的示例中,我使用了JOIN,但您可以将相同的技术应用于原始子查询。
实施例
SELECT
t1.a,
t1.b
FROM
Tab1 AS t1
INNER JOIN Tab2 AS t2 ON t1.Id = t2.Id
WHERE
(
-- Check block 1.
t2.x = 1
AND t2.y = 1
AND t2.z > GETDATE()
)
-- Check block 2.
OR z IS NULL
;
编辑:我不完全确定我理解这个问题。如果你能提供一些样本记录和预期的输出,那将有所帮助。