【问题标题】:T-SQL where clause case statementT-SQL where 子句 case 语句
【发布时间】:2012-05-22 10:58:50
【问题描述】:

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

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

【问题讨论】:

  • CASE 语句只能提供——不能提供整个代码块。你需要重新安排你的逻辑

标签: tsql case where-clause


【解决方案1】:

就像之前说的,你不能像你正在做的那样使用 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)
            )
    )

【讨论】:

  • 谢谢我最终使用了这个。我正在寻找一个布尔条件,它将执行一个或另一个 sql 块,但不确定如何在 where 子句中编写它。这有帮助。
  • @nickgowdy:没问题。很高兴帮助:P
【解决方案2】:

你不能这样使用CASE

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    相关资源
    最近更新 更多