【问题标题】:SQL WHERE clause - Conditional filtersSQL WHERE 子句 - 条件过滤器
【发布时间】:2023-03-27 16:43:01
【问题描述】:

我有一个查询,我想使用以下逻辑(完全清楚它不会像写的那样工作):

select *
From orders
Where   if Value1 != 'TEST'
        (Value1 = @1)
        Else if Value2 != 'TEST'
        (Value2 = @2)
        Else 1=2

我认为我不能使用Case...Wheniif,因为该值可以根据条件结果过滤更改查询。有什么想法吗?

【问题讨论】:

  • 什么风格的 SQL ?
  • 为什么不使用标准的 AND/OR?
  • 你可以使用存储过程吗,可以通过动态存储过程来完成
  • 抱歉描述性不够!使用microsoft SQL server 2012,所以T-SQL
  • 不能使用和/或。如果第一个是真的,我不想匹配第二个。如果第一个没有好的数据,只想使用第二个

标签: sql-server tsql where


【解决方案1】:

你的逻辑相当于:

Select *
From orders
Where (Value1 <> 'TEST' and Value1 = @1) OR
      (Value1 = 'TEST' and Value2 <> 'TEST' and Value2 = @2)

这不是 100% 等价的。如果Value1 可能是NULL,那么逻辑应该考虑到这一点:

Select o.*
From orders o
Where (Value1 <> 'TEST' and Value1 = @1) OR
      (COALESCE(Value1, 'TEST') = 'Test' and Value2 <> 'TEST' and Value2 = @2)

【讨论】:

  • 好吧,你让我觉得自己很愚蠢——我不敢相信我没有想到这一点!谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-07-02
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2019-02-15
  • 2011-05-28
相关资源
最近更新 更多