【问题标题】:IF/Else/CASE Statement in WHERE clausesWHERE 子句中的 IF/Else/CASE 语句
【发布时间】:2016-10-28 16:30:54
【问题描述】:

我正在从一个名为 [tagged] 的列中选择记录,它默认为零。
我的问题是当@tagged 变量为NULL 时,我想同时选择0,1 值。这让我觉得我应该做一个IF/ELSE,但我的尝试失败了。

---简单的例子:

declare @tagged int = NULL

SELECT * 
FROM [TableName] 
WHERE datecreated > '2016-01-01' 
AND tagged = @tagged

许多 DBA 都推荐使用 CASE 子句。 但我需要帮助知道在哪里添加它。

我是否将其添加到查询中?

我的微弱尝试是这样的:


SELECT * 
FROM [TableName] 
WHERE datecreated > '2016-01-01' 
AND (
    CASE @tagged 
    WHEN 0 THEN (tagged = 0) 
    WHEN 1 THEN (tagged = 1)
    ELSE (tagged IN(0,1)
    END
)

【问题讨论】:

  • CASE 可用于JOIN,如here 所示。 WHERE 子句可以使用相同的模式。

标签: sql tsql case


【解决方案1】:

使用OR 条件而不是笨重的CASE 语句。

SELECT *
FROM   [TableName]
WHERE  datecreated > '2016-01-01'
       AND ( tagged = @tagged
              OR @tagged IS NULL ) 

如果您希望使用CASE 解决它(考虑到tagged 列中没有NULL 值)

WHERE  datecreated > '2016-01-01'
       AND tagged = CASE
                      WHEN @tagged IS NOT NULL THEN @tagged
                      ELSE tagged
                    END 

【讨论】:

  • 正是我想要的。在我的例子中,没有 NULL 值,所以你如何格式化 CASE 结构是有意义的。
  • @coffeemonitor - Gald 它帮助了你..我更喜欢OR 条件.. 更简单且更具可读性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2019-07-14
  • 1970-01-01
  • 2020-03-26
  • 2017-04-01
  • 1970-01-01
相关资源
最近更新 更多