SQL Select-可选日期签入where子句

SQL Select-可选日期签入where子句,sql,date,null,where,sqlanywhere,Sql,Date,Null,Where,Sqlanywhere,我有一个SQLAnywhere 11中的视图,具有以下结构(日期为dd-mm-yyyy格式): ID,有效期从,有效期到,某些值 2013年1月1日,2013年2月1日1 2013年2月2日,2013年3月1日2 2013年3月2日,2013年4月1日3 1,空,空3 因此,有多个条目具有相同的id但日期不同,并且日期也可能为空。 现在我需要一个查询,该查询只选择当前日期介于和之间的条目,或者如果当前日期不在任何有效范围内,则选择日期为空的条目。 我尝试了以下查询: 选择*FROM MYV

我有一个SQLAnywhere 11中的视图,具有以下结构(日期为dd-mm-yyyy格式):


ID,有效期从,有效期到,某些值
2013年1月1日,2013年2月1日1
2013年2月2日,2013年3月1日2
2013年3月2日,2013年4月1日3
1,空,空3

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


选择*FROM MYVIEW,其中VALID_FROM为NULL,或者选择getdate(),介于VALID_FROM和VALID_UNTIL之间;

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


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

看起来您正在使用

VALID_FROM IS NULL
我建议您尝试以下方式:

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

或者我可能看错了问题…

你能不能做一个[选择前1名]然后排序,这样空值就可以是最后一个

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

但是我永远不会得到空行。如果没有有效日期范围的行,我想得到空行。是的,我误解了问题,对不起@tclark333答案应该能很好地解决这个问题。