sql - 在 where 条件中添加 case 语句并在 then 子句中提供条件语句
问题描述
我有一个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
但是这个查询在=
inside显示语法错误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
解决方案
试试这个
WHERE convert(varchar,dt_start,103)= CASE WHEN Substring(datename(dw,getdate()),1,3) = 'mon' THEN convert(varchar,dt_start,103) = convert(varchar,dateadd(day,-3,getdate()),103) ELSE convert(varchar,dt_start,103) = convert(varchar,dateadd(day,-1,getdate()),103) END AND convert(varchar,dt_start,103)<= CASE WHEN Substring(datename(dw,getdate()),1,3) = 'mon' then convert(varchar,dateadd(day,-2,getdate()),103) else --put a condition that does not filter any data (maybe) convert(varchar,getdate(),103) end
推荐阅读
- sql - 加速 SQL 查询
- vue.js - Nuxtjs 自动注销用户不活动
- c++ - 如何编写用户可以提供数组元素的代码?
- django - 为什么我的 django 网络服务器在尝试发送密码重置邮件后停止
- c - 如何在 GBDK 上获得随机数?
- maven - 如何使用 curl 从 REST API 在 Nexus 2 上上传具有不同分类器和相同 pom.xml 的 jar?
- spring-boot - osbwservlet.support.ErrorPageFilter : 从请求 [0] Primefaces 转发到错误页面
- mysql - 如何使用 regexp_substr MariaDB 从字符串中提取最后一个日期
- wpf - 如何将正确的上下文传递给 WPF ListView 的 ItemTemplate 中的 DataTemplate
- javascript - 赛普拉斯 waitUntil 元素被聚焦