需要一些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 IS NULL AND @p_end_atd IS NULL) OR (vso.pol_atd between @p_start_atd and @p_end_atd)
)
第93行关键字“IS”附近的语法不正确。
这可能是一个小错误,但令我感到沮丧。也许有更好的方式来写这个?谢谢!
答案 0 :(得分:2)
就像你说的那样,你不能像你一样使用案例陈述。所以这可能是一个建议:
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)
)
)
答案 1 :(得分:0)