SQL WHERE 子句 - 条件过滤器

SQL WHERE clause - Conditional filters

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

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

我认为我不能使用 Case...Wheniif,因为根据条件结果过滤查询的值会发生变化。有什么想法吗?

你的逻辑等同于:

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)