我使用以下查询
SELECT *
FROM [dbo].[QUANTITY]
WHERE getdate() BETWEEN fromdate AND todate
如果todate
为null
(1900-01-01 00:00:00.000
),则只会过滤掉它们。我希望结果中甚至todate
的字段为null
(1900-01-01 00:00:00.000
)。怎么办呢?
答案 0 :(得分:2)
您可以使用and
和or
运算符的组合明确检查它:
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'
)