【发布时间】:2018-06-20 04:07:11
【问题描述】:
我有一个where 子句,我需要在其中添加case 语句,在then 和else 中我必须给出条件语句。
我的 where 条件是这样的
WHERE
CASE
WHEN
Substring(datename(dw,getdate()),1,3) = 'mon'
THEN convert(varchar,dt_start,103) = convert(varchar,dateadd(day,-3,getdate()),103)
AND convert(varchar,dt_start,103) <= convert(varchar,dateadd(day,-2,getdate()),103)
ELSE convert(varchar,dt_start,103) = convert(varchar,dateadd(day,-1,getdate()),103)
END
但此查询在 = 内 then 处显示语法错误。相同的逻辑在 PostgreSQL 中有效,但是当我在 SQL 服务器中尝试时,它在 = 处出现语法错误。我怎么能解决这个问题。请帮忙
这是相应的 PGSQL 查询。
WHERE
CASE
WHEN to_char(now(), 'dy'::text) = 'mon'::text THEN to_char(dt_start, 'yyyymmdd'::text) = to_char(now() - '3 days'::interval, 'yyyymmdd'::text) AND to_char(dt_start, 'yyyymmdd'::text) <= to_char(now() - '2 days'::interval, 'yyyymmdd'::text)
ELSE to_char(dt_start, 'yyyymmdd'::text) = to_char(now() - '1 day'::interval, 'yyyymmdd'::text)
END
【问题讨论】:
-
我看不出这在 PostgreSQL 或任何其他 RDBMS 中是如何工作的。 SQL 中的
CASE是一个返回单个标量值的表达式。它不能像过程语言那样用于控制执行流程。 -
是的,它在 pgsql 中工作。我已经添加了有问题的 pgsql where 子句。
标签: sql sql-server case where-clause