【发布时间】:2014-08-30 01:56:35
【问题描述】:
我有一张包含三个日期的表格:
id date1 date2 date3
1 1945-12-13 1930-11-04 null
2 1970-09-12 1971-09-13 1972-09-14
3 null null null
4 2000-01-01 2001-01-01 2002-01-01
我的 proc 传入 2 个参数:
@dateFrom datetime = NULL,
@dateTo datetime = NULL
我想返回介于两者之间的任何日期的记录。 @dateFrom 或 @DateTo 的 NULL 使其开放结束。
这适用于开放式的情况,但不适用于两者都不为空的情况。
SELECT *
FROM Table1
WHERE (@dateFrom IS NULL
OR ISNULL(date1,'12/31/1753') >= @dateFrom
OR ISNULL(date2,'12/31/1753') >= @dateFrom
OR ISNULL(date3,'12/31/1753') >= @dateFrom)
AND (@dateTo IS NULL
OR ISNULL(date1,'12/31/2099') <= @dateTo
OR ISNULL(date2,'12/31/2099') <= @dateTo
OR ISNULL(date3,'12/31/2099') <= @dateTo)
如果我通过 @dateFrom = '1940-01-01' 和 @dateTo = '1950-01-01', 我只想要第一条记录,但我得到了 1、2 和 4,因为它们的日期都 > 1940。
我只是想不通如何构建它。
已更改列名和表名以保护无辜者。
【问题讨论】:
标签: sql sql-server tsql