sql - 在 SQL CASE where 子句中使用 BETWEEN

标签 sql case where-clause

我有一个表单,用户可以在其中提取报告。 在表单中,他们可以选择开始日期和结束日期,或者为这两个值传递 null。如果他们选择 null,则返回 effectivedate < GETDATE() 的所有记录 CASE 语句似乎不喜欢 Between,也不喜欢 '<' 运算符

这是我的脚本

SELECT * FROM tbReport
WHERE 
    EffectiveDate 
    CASE 
        WHEN (@StartDate IS NOT NULL AND @EndDate IS NOT NULL) 
        THEN BETWEEN (@StartDate AND @EndDate)          
         ELSE 
                  THEN < GETDATE()

    END

最佳答案

您可以在不使用大小写的情况下重写它,例如:

SELECT  * 
FROM   tbReport
WHERE   (
            @StartDate is not null 
            and 
            @EndDate is not null
            and 
            EffectiveDate between @StartDate AND @EndDate
        )
        or
        (
            (
                @StartDate is null 
                or 
                @EndDate is null
            )
            and 
            EffectiveDate < getdate()
        )

关于sql - 在 SQL CASE where 子句中使用 BETWEEN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5416695/

相关文章:

sql - Oracle - 查找不在表中的所有日期

sql-server - SQL Server CASE 子句中的比较

html - 松散搜索,例如这样 "htlm"就会找到 "html5"

mysql - WHERE 子句中的单列多行

python - 类似pandas语句的SQL where子句

sql - 与日历比较查找缺失的日期

php - MySQL 多重连接并使用结果连接另一个表

mysql - 只更新我的sql表中的几条记录

mysql - 在带有 LIKE 的 CASE 语句中使用 GROUP_CONCAT 列别名

wolfram-mathematica - 如何在 Mathematica 函数中禁用区分大小写?