在 where 子句的 Case 语句中定义一个变量
Posted
技术标签:
【中文标题】在 where 子句的 Case 语句中定义一个变量【英文标题】:Define a variable in Case statement at where clause 【发布时间】:2020-11-20 09:06:57 【问题描述】:我创建了一个每天运行的 SQL 查询,它将根据天数生成结果。为此,我在 where 子句 case 语句中定义了一个变量来获取当前日期。现在,当我运行查询时,它显示一个错误,指出“=”附近的语法不正确。
CASE
when datename(dw,getdate()) = 'Monday' then PriceH_strMonday = '`Y'
when datename(dw,getdate()) = 'Tuesday' then PriceH_strTuesday = 'Y'
when datename(dw,getdate()) = 'Wednesday' then 'PriceH_strWednesday = 'Y'
when datename(dw,getdate()) = 'Thursday' then 'PriceH_strThursday = 'Y'
when datename(dw,getdate()) = 'Friday' then 'PriceH_strFriday = 'Y'
when datename(dw,getdate()) = 'Saturday' then 'PriceH_strSaturday = 'Y'
when datename(dw,getdate()) = 'Sunday' then 'PriceH_strSunday = 'Y'
end
如果 case 语句在星期一运行,那么语句将在 PriceH_strMonday 上设置 'Y',然后它会生成属于星期一项目的数据。
请帮助我。
【问题讨论】:
这是在 SELECT 中还是在 UPDATE 中? SQL Server 不支持Case
(Switch
) 语句,它只有CASE
表达式,它返回一个标量值,而不是一个布尔结果。我假设这是在您的WHERE
中,您应该使用AND
和OR
逻辑。
'Monday' then PriceH_strMonday = '`Y' 你能看出这里有什么问题吗?
@jarlh 它只是选择
@kelvin,我需要获得这一天才能满足我的条件。如果我设置像星期一、星期二这样的静态值,那么我怎么比较 PriceH_strMonday = 'Y' 或 PriceH_strTuesday = 'N' 等
【参考方案1】:
正如我在 cmets 中提到的,SQL Server 不支持 Case
(Switch
) 语句。我假设以上内容在WHERE
中,在这种情况下,您也不应该尝试使用CASE
表达式;只需使用AND
和OR
逻辑:
WHERE (DATENAME(WEEKDAY,GETDATE()) = 'Monday' AND PriceH_strMonday = 'Y')
OR (DATENAME(WEEKDAY,GETDATE()) = 'Tuesday' AND PriceH_strTuesday = 'Y')
OR (DATENAME(WEEKDAY,GETDATE()) = 'Wednesday' AND PriceH_strWednesday = 'Y')
OR (DATENAME(WEEKDAY,GETDATE()) = 'Thursday' AND PriceH_strThursday = 'Y')
OR (DATENAME(WEEKDAY,GETDATE()) = 'Friday' AND PriceH_strFriday = 'Y')
OR (DATENAME(WEEKDAY,GETDATE()) = 'Saturday' AND PriceH_strSaturday = 'Y')
OR (DATENAME(WEEKDAY,GETDATE()) = 'Sunday' AND PriceH_strSunday = 'Y')
【讨论】:
以上是关于在 where 子句的 Case 语句中定义一个变量的主要内容,如果未能解决你的问题,请参考以下文章
用于返回结果集的 where 子句中的 case 语句包含空值
具有另一个 sql 语句的 where 子句中的 case 条件