Sql 在where条件中添加case语句,并在then子句中提供条件语句
我有一个Sql 在where条件中添加case语句,并在then子句中提供条件语句,sql,sql-server,case,where-clause,Sql,Sql Server,Case,Where Clause,我有一个where子句,我需要在其中添加case语句,然后在中添加和否则我必须给出条件语句 我的情况是这样的 WHERE CASE WHEN Substring(datename(dw,getdate()),1,3) = 'mon' THEN convert(varchar,dt_start,103) = convert(varchar,dateadd(day,-3,getdate()),103) AND conv
where
子句,我需要在其中添加case
语句,然后在中添加和否则
我必须给出条件语句
我的情况是这样的
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
- 试试这个
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
在哪里
转换(varchar,dt_start,103)=
案例
什么时候
子字符串(datename(dw,getdate()),1,3)='mon'
然后转换(varchar,dt_start,103)=
转换(varchar,dateadd(day,-3,getdate()),103)
ELSE转换(varchar,dt_start,103)=
转换(varchar,dateadd(day,-1,getdate()),103)
结束
及
转换(varchar,dt_start,103)
- 试试这个
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
在哪里
转换(varchar,dt_start,103)=
案例
什么时候
子字符串(datename(dw,getdate()),1,3)='mon'
然后转换(varchar,dt_start,103)=
转换(varchar,dateadd(day,-3,getdate()),103)
ELSE转换(varchar,dt_start,103)=
转换(varchar,dateadd(day,-1,getdate()),103)
结束
及
convert(varchar,dt_start,103)试试这个:你必须根据你的要求制定两个单独的条件,记住一件事,你只能作为案例开始,其中a=CASE
不能作为案例开始,然后a=b+c…
或者在这种情况下,我建议使用动态查询,在这种情况下,根据不同的条件很容易操作查询
WHERE convert(varchar,dt_start,103) =
CASE WHEN Substring(datename(dw,getdate()),1,3) = 'mon' THEN
convert(varchar,dateadd(day,-3,getdate()),103)
ELSE
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
convert(varchar,dt_start,103)
END
其中转换(varchar,dt_start,103)=
当子字符串(datename(dw,getdate()),1,3)=“mon”时,则为大小写
转换(varchar,dateadd(day,-3,getdate()),103)
其他的
转换(varchar,dateadd(day,-1,getdate()),103)
结束
并转换(varchar,dt_start,103)试试这个:你必须根据你的要求制定两个单独的条件,记住一件事,你只能作为案例开始,其中a=CASE
而不是作为案例开始,然后a=b+c…
或者在这种情况下,我建议使用动态查询,在这种情况下,根据不同的条件很容易操作查询
WHERE convert(varchar,dt_start,103) =
CASE WHEN Substring(datename(dw,getdate()),1,3) = 'mon' THEN
convert(varchar,dateadd(day,-3,getdate()),103)
ELSE
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
convert(varchar,dt_start,103)
END
其中转换(varchar,dt_start,103)=
当子字符串(datename(dw,getdate()),1,3)=“mon”时,则为大小写
转换(varchar,dateadd(day,-3,getdate()),103)
其他的
转换(varchar,dateadd(day,-1,getdate()),103)
结束
和convert(varchar,dt_start,103)我看不出这在PostgreSQL或任何其他RDBMS中如何工作CASE
是一个返回单个标量值的表达式。它不能像过程语言那样用于控制执行流。是的,它在pgsql中工作。我已经添加了有问题的pgsql where子句。我看不出这怎么可能在PostgreSQL或任何其他RDBMS中工作CASE
是一个返回单个标量值的表达式。它不能像过程语言那样用于控制执行流。是的,它在pgsql中工作。我已经添加了有问题的pgsql where子句。感谢您的回答。感谢您的回答。