我有一张桌子:
ID as int, ParentId as int, FreeFromTerxt as varchar(max), ActiveUntil as DateTime
例如,在此表中我有两条记录。
1, 100, 'Some text', '2015-11-30 12:10:09.0000000'
2, 100, 'New text', null
我要做的是获取当前的活动记录,在上面的情况下记录为1.为此,我只选择以下标准:
ActiveUntil > GETDATE()
这很好用,但如果我将第一个日期更改为2015-10-30,我需要获取空记录,因为此记录优先。
所以我将代码更改为:
((ActiveUntil is NULL) OR (ActiveUntil > GETDATE()))
但这不起作用。
答案 0 :(得分:0)
试试这样:
((ActiveUntil is NULL) OR (CONVERT(char(10), ActiveUntil ,126)) > GETDATE())
请参阅MSDN Cast and Convert。格式说明符126用于YYYY-MM-DD。或者您可以使用CAST
((ActiveUntil is NULL) OR (CAST(ActiveUntil as Date) > GETDATE())
答案 1 :(得分:0)
以下是union
的一些示例:
DECLARE @t TABLE ( d DATETIME )
INSERT INTO @t
VALUES ( NULL ),
( '2015-11-30' )
SELECT TOP 1 *
FROM ( SELECT * , 1 AS ordering
FROM @t
WHERE d > GETDATE()
UNION ALL
SELECT * , 2 AS ordering
FROM @t
WHERE d IS NULL
) t
ORDER BY ordering, d
对于2015-11-30
,它会返回2015-11-30
。对于2015-10-30
,它会返回null
。