SQL 带日期范围的 WHERE 子句中的服务器 CASE

SQL Server CASE in WHERE clause with daterange

我有一个带有可选日期范围参数的查询,我正在尝试处理一个案例但遇到困难。

所以基本上是这样的:

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