SQL 带日期范围的 WHERE 子句中的服务器 CASE
SQL Server CASE in WHERE clause with daterange
我有一个带有可选日期范围参数的查询,我正在尝试处理一个案例但遇到困难。
- 如果两个日期都是 NULL,return 包括 NULL 日期行在内的所有内容
- 如果两者都有值,return只有范围内的值
- 如果 from_date 有值,并且 to_date 为空,return 一切 > from_date
- 如果 from_date 为 null,并且 to_date 有值,return 一切 < to_date
所以基本上是这样的:
SELECT *
FROM TABLE
WHERE CASE WHEN (@FROM_DATE IS NOT NULL and @TO_DATE IS NOT NULL) THEN
DATE BETWEEN ISNULL(@FROM_DATE,1/1/1900) and ISNULL(@TO_DATE,1/1/2999)
ELSE
DATE = DATE ?
不胜感激!!
您似乎已经决定 1900 年和 2999 年的日期不会合法地出现在数据中,因此您可以使用
SELECT *
FROM TABLE
WHERE (@FROM_DATE IS NULL AND @TO_DATE IS NULL )
OR (DATE BETWEEN ISNULL(@FROM_DATE, '19000101')
AND ISNULL(@TO_DATE, '29990101'))
OPTION (RECOMPILE);
我有一个带有可选日期范围参数的查询,我正在尝试处理一个案例但遇到困难。
- 如果两个日期都是 NULL,return 包括 NULL 日期行在内的所有内容
- 如果两者都有值,return只有范围内的值
- 如果 from_date 有值,并且 to_date 为空,return 一切 > from_date
- 如果 from_date 为 null,并且 to_date 有值,return 一切 < to_date
所以基本上是这样的:
SELECT *
FROM TABLE
WHERE CASE WHEN (@FROM_DATE IS NOT NULL and @TO_DATE IS NOT NULL) THEN
DATE BETWEEN ISNULL(@FROM_DATE,1/1/1900) and ISNULL(@TO_DATE,1/1/2999)
ELSE
DATE = DATE ?
不胜感激!!
您似乎已经决定 1900 年和 2999 年的日期不会合法地出现在数据中,因此您可以使用
SELECT *
FROM TABLE
WHERE (@FROM_DATE IS NULL AND @TO_DATE IS NULL )
OR (DATE BETWEEN ISNULL(@FROM_DATE, '19000101')
AND ISNULL(@TO_DATE, '29990101'))
OPTION (RECOMPILE);