使用getdate()

时间:2015-04-17 18:27:34

标签: sql sql-server select getdate

我使用以下查询

SELECT *
    FROM [dbo].[QUANTITY] 
    WHERE getdate() BETWEEN fromdate AND todate

如果todatenull1900-01-01 00:00:00.000),则只会过滤掉它们。我希望结果中甚至todate的字段为null1900-01-01 00:00:00.000)。怎么办呢?

3 个答案:

答案 0 :(得分:2)

您可以使用andor运算符的组合明确检查它:

SELECT *
FROM   [dbo].[QUANTITY] 
WHERE  (getdate() >= fromdate AND
        (todate IS NULL OR
         todate = '1900-01-01 00:00:00.000')
       ) OR
       getdate() BETWEEN fromdate AND todate

答案 1 :(得分:0)

似乎某个地方有一个.Net或一些程序保存了Date.MinValue,如果应用程序无法替换,你可以随时使用

datefromparts(1900,1,1)

并将where子句更改为:

where getdate() > fromdate
and (todate = datefromparts(1900,1,1) or getdate() <= todate)

这将采取最大或无限的todate。如果有可能,为了防止奇怪的结果,我也会使用

declare @testDate datetime = getdate(); 

并在前面的where子句中使用该变量而不是getdate()。

答案 2 :(得分:0)

SELECT *
FROM [dbo].[QUANTITY] 
WHERE getdate() >= fromdate
  AND getdate() <= COALESCE(todate
                           ,NULLIF(todate,'1900-01-01 00:00:00.000')
                           ,'9999-12-31 23:59:59.997'
                           )