0

需要一些 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”附近的语法不正确。

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

4

2 回答 2

2

就像之前说的那样,你不能像你正在做的那样使用 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)
            )
    )
于 2012-05-22T11:06:15.450 回答
0

你不能这样用CASE

它用于获取值而不是限制。检查此以查看如何正确使用CASE.


在您的情况下,您必须更改您的逻辑,可能使用IF's 并制作想要SELECT的 's。

于 2012-05-22T11:06:00.957 回答