sql - 条件 where 子句 SQL Server 2012

标签 sql tsql sql-server-2012

我四处搜索,但没有找到与我要实现的目标类似的情况。我只想在条件为真时才执行where子句表达式,否则我想忽略不匹配的数据。

Where (
        case when LeaveDateTime > FromDate and EnteringDateTime < ToDate then
        (dateadd(d, Threshhold, LeaveDateTime) >= EnteringDateTime
        end
);

我在 '>=' 附近得到不正确的语法 有人可以帮我解决这个问题吗?

最佳答案

用简单的逻辑替换它:

Where (not (LeaveDateTime > FromDate and EnteringDateTime < ToDate) or
       dateadd(day, Threshhold, LeaveDateTime) >= EnteringDateTime
      );

如果变量取NULL 值,那么逻辑就有些繁琐了。

您的版本不起作用,因为 case 是一个标量表达式。 bool 比较不是标量表达式,因此它不能是then 返回的值。

关于sql - 条件 where 子句 SQL Server 2012,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27851194/

相关文章:

sql - 在 TEXT 列中搜索空格时,CHARINDEX 始终返回 0

sql-server - 带有连接字符串的 SQLCmd

c# - SQL Server 中奇怪的时差

php - 在更新查询期间根据新值更新另一列

sql - 您如何对实体的自定义属性进行建模?

Java Hibernate 填充 transient 属性

sql - 执行按位求和

sql - 在类似语句上加入 SQL Server 表

mysql - 在 MySQL 中,我可以使用 UNION 进行 SELECT 但根据第一个查询限制第二个查询的行吗?

sql - 每分钟计算两列的行数