【问题标题】:SQL query with case datepart带案例日期部分的 SQL 查询
【发布时间】:2015-10-15 06:24:20
【问题描述】:

我想根据绑定变量值获取从结果中排除周末的数据。不知何故,我无法让这个查询运行。

select *  from tablename a
WHERE a.date >= '2015-04-13'
AND a.date <= '2015-04-21'
AND CASE  WHEN :1 = 'Y' THEN ((DATEPART(dw, a.date) + @@DATEFIRST) % 7) NOT IN (0, 1) END

我收到以下错误:关键字“NOT”附近的语法不正确

【问题讨论】:

  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或完全其他的东西。

标签: sql case datepart


【解决方案1】:

在这里使用case 表达式会使事情变得过于复杂,恕我直言。你有两种情况:

  1. 如果绑定变量为Y,则需要排除周末。
  2. 如果不是,您希望包含它们。

这个逻辑可以通过or 逻辑运算符的更简单的用法(同样,恕我直言)来实现:

SELECT *
FROM   tablename a
WHERE  a.date >= '2015-04-13' AND 
       a.date <= '2015-04-21' AND
       (:1 != 'Y' OR ((DATEPART(dw, a.date) + @@DATEFIRST) % 7) NOT IN (0, 1))

【讨论】:

    猜你喜欢
    • 2012-05-15
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多