T-SQL where子句case语句

时间:2012-05-22 10:58:50

标签: 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 IS NULL AND @p_end_atd IS NULL) OR (vso.pol_atd between @p_start_atd and @p_end_atd)
)
  

第93行关键字“IS”附近的语法不正确。

这可能是一个小错误,但令我感到沮丧。也许有更好的方式来写这个?谢谢!

2 个答案:

答案 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)

你不能像那样使用CASE

它用于获取值而不是限制。 Check this查看如何正确使用CASE


在您的情况下,您可能需要使用IF更改逻辑并制作所需的SELECT