我正在尝试在我的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
Run Code Online (Sandbox Code Playgroud)
Eri*_*ric 47
您case在where声明中不需要使用括号和or:
Select * From Times
WHERE StartDate <= @Date AND EndDate >= @Date
AND (
(@day = 'Monday' AND Monday = 1)
OR (@day = 'Tuesday' AND Tuesday = 1)
OR Wednesday = 1
)
Run Code Online (Sandbox Code Playgroud)
此外,您的语法错误的情况.它不会向字符串附加内容 - 它返回单个值.你想要这样的东西,如果你真的要使用一个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
Run Code Online (Sandbox Code Playgroud)
只是为了额外的umph,您可以使用between运营商为您的日期:
where @Date between StartDate and EndDate
Run Code Online (Sandbox Code Playgroud)
进行最终查询:
select
*
from
Times
where
@Date between StartDate and EndDate
and (
(@day = 'Monday' and Monday = 1)
or (@day = 'Tuesday' and Tuesday = 1)
or Wednesday = 1
)
Run Code Online (Sandbox Code Playgroud)
只需做 select:
Select * From Times
WHERE (StartDate <= @Date) AND (EndDate >= @Date) AND
((@day = 'Monday' AND (Monday = 1))
OR (@day = 'Tuesday' AND (Tuesday = 1))
OR (Wednesday = 1))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130089 次 |
| 最近记录: |