SQL Select-可选日期签入where子句
我有一个SQLAnywhere 11中的视图,具有以下结构(日期为dd-mm-yyyy格式):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
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答案应该能很好地解决这个问题。