SQL Select - where子句中的可选日期检查

时间:2013-11-07 19:45:02

标签: sql date null where sqlanywhere

我在sqlanywhere11中有一个视图,其结构如下(日期格式为dd-mm-yyyy):

ID, VALID_FROM, VALID_UNTIL, SOME_VALUE
1, 01-01-2013, 01-02-2013 1
1, 02-02-2013, 01-03-2013 2
1, 02-03-2013, 01-04-2013 3
1, null, null 3

因此,有多个条目具有相同的ID但日期不同,日期也可能为空。 现在我需要一个查询,只选择当前日期介于 VALID_FROM VALID_UNTIL 之间的条目,或者选择当前日期为 null 日期的条目不在任何有效范围内。
我尝试了以下查询:

SELECT * FROM MYVIEW WHERE VALID_FROM IS NULL OR getdate() BETWEEN VALID_FROM AND VALID_UNTIL;

但是这不起作用,因为如果有一个 null 行,它将始终被选中,即使有另一行具有有效的日期范围。

是否可以创建一个查找正确行的SELECT查询?

2 个答案:

答案 0 :(得分:2)

你不能只做一个[SELECT TOP 1]并订购它以便null将是最后一个吗?

SELECT TOP 1 * 
FROM MYVIEW 
WHERE VALID_FROM IS NULL OR getdate() BETWEEN VALID_FROM AND VALID_UNTIL
ORDER BY CASE WHEN VALID_FROM IS NOT NULL THEN 1 ELSE 2 END

答案 1 :(得分:0)

看起来您正在使用

显式选择空行
VALID_FROM IS NULL

我建议尝试类似的事情:

SELECT * FROM MYVIEW WHERE getdate() BETWEEN VALID_FROM AND VALID_UNTIL;

或许我错过了这个问题...