加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

case语句where子句 – SQL Server

发布时间:2020-12-12 16:12:53 所属栏目:MsSql教程 来源:网络整理
导读:我试图在我的SQL查询的where子句中添加一个case或if语句. 我有一个开始和结束日期的旅程时间表,每天都有一个布尔字段,表示当天旅行发生的地方.这是我到目前为止,但我得到错误的语法错误: declare @date datetimeset @Date = '05/04/2012' declare @day nvarc
我试图在我的SQL查询的where子句中添加一个case或if语句.
我有一个开始和结束日期的旅程时间表,每天都有一个布尔字段,表示当天旅行发生的地方.这是我到目前为止,但我得到错误的语法错误:
declare @date datetime
set @Date = '05/04/2012' 
declare @day nvarchar(50)
set @day = 'Monday'

Select * From Times
WHERE (StartDate <= @Date) AND (EndDate >= @Date)
CASE WHEN @day = 'Monday' THEN
 AND (Monday = 1)
WHEN @day = 'Tuesday' THEN
AND (Tuesday = 1)
ELSE
AND (Wednesday = 1) 
END

解决方法

你不需要在where语句中的case,只需使用括号和/或
Select * From Times
WHERE StartDate <= @Date AND EndDate >= @Date
AND (
    (@day = 'Monday' AND Monday = 1)
    OR (@day = 'Tuesday' AND Tuesday = 1)
    OR Wednesday = 1
)

另外,您的语法错误.它不会将东西附加到字符串 – 它返回一个值.你会想要这样的东西,如果你真的要使用一个case语句(你不应该):

Select * From Times
WHERE (StartDate <= @Date) AND (EndDate >= @Date)
AND 1 = CASE WHEN @day = 'Monday' THEN Monday
             WHEN @day = 'Tuesday' THEN Tuesday
             ELSE Wednesday
        END

只需要额外的一点,你可以使用之间的运算符你的日期:

where @Date between StartDate and EndDate

进行最终查询:

select
    * 
from 
    Times
where
    @Date between StartDate and EndDate
    and (
        (@day = 'Monday' and Monday = 1)
        or (@day = 'Tuesday' and Tuesday = 1)
        or Wednesday = 1
    )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读