Tsql T-SQLWHERE子句case语句
需要一些SQL方面的小帮助。我正在使用Tsql T-SQLWHERE子句case语句,tsql,case,where-clause,Tsql,Case,Where Clause,需要一些SQL方面的小帮助。我正在使用VARCHAR值来确定在WHERE子句中使用哪种逻辑,但是在编写这个case语句时遇到了一些问题 where (CASE WHEN @p_flag = 'ATA' THEN (@p_start_ata IS NULL AND @p_end_ata IS NULL) OR (vso.poa_ata between @p_start_ata and @p_end_ata) ELSE (@p_start_atd
VARCHAR
值来确定在WHERE子句中使用哪种逻辑,但是在编写这个case语句时遇到了一些问题
where
(CASE WHEN @p_flag = 'ATA'
THEN (@p_start_ata IS NULL AND @p_end_ata IS NULL) OR (vso.poa_ata between @p_start_ata and @p_end_ata)
ELSE (@p_start_atd IS NULL AND @p_end_atd IS NULL) OR (vso.pol_atd between @p_start_atd and @p_end_atd)
)
第93行关键字“IS”附近的语法不正确
这可能是个小错误,但让我很沮丧。也许有更好的写作方法?谢谢 你不能那样使用
案例
它用于获取值,而不是限制。查看如何正确使用案例
在您的情况下,您必须更改逻辑,可能需要使用
IF
,并使想要的选择。如前所述,您不能像现在这样使用case语句。所以这可能是一个建议:
WHERE
(
@p_flag = 'ATA'
AND
(
(@p_start_ata IS NULL AND @p_end_ata)
OR (vso.poa_ata between @p_start_ata and @p_end_ata)
)
)
OR
(
NOT @p_flag = 'ATA'
AND
(
(@p_start_atd IS NULL AND @p_end_atd IS NULL)
OR (vso.pol_atd between @p_start_atd and @p_end_atd)
)
)
CASE语句只能提供值,不能提供整个代码块。你需要重新安排你的逻辑谢谢我用了这个。我正在寻找一个布尔条件,它将执行一个或另一个sql块,但不确定如何在where子句中编写它。这有帮助。@nickgowdy:没问题。很乐意帮忙:P