tsql根据日期和null选择记录

时间:2015-11-16 13:36:01

标签: tsql date select

我有一张桌子:

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()))

但这不起作用。

2 个答案:

答案 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