小编典典

SQL:WHERE 子句中的 IF 子句

all

是否可以在 MS SQL的 WHERE* 子句中使用 IF 子句? *

例子:

WHERE
    IF IsNumeric(@OrderNumber) = 1
        OrderNumber = @OrderNumber
    ELSE
        OrderNumber LIKE '%' + @OrderNumber + '%'

阅读 66

收藏
2022-06-07

共1个答案

小编典典

使用CASE语句
更新: 前面的语法(正如一些人指出的那样)不起作用。您可以按如下方式使用 CASE:

WHERE OrderNumber LIKE
  CASE WHEN IsNumeric(@OrderNumber) = 1 THEN 
    @OrderNumber 
  ELSE
    '%' + @OrderNumber
  END

或者您可以使用[@NJ Reed]指出的 IF 语句。

您应该能够在没有任何 IF 或 CASE 的情况下执行此操作

 WHERE 
   (IsNumeric(@OrderNumber) AND
      (CAST OrderNumber AS VARCHAR) = (CAST @OrderNumber AS VARCHAR)
 OR
   (NOT IsNumeric(@OrderNumber) AND
       OrderNumber LIKE ('%' + @OrderNumber))

根据 SQL 的风格,您可能需要根据是否支持隐式转换,将订单号的转换调整为 INT 或 VARCHAR。

这是 WHERE 子句中非常常见的技术。如果您想在 WHERE 子句中应用一些“IF”逻辑,您需要做的就是将带有布尔 AND 的额外条件添加到需要应用它的部分。

2022-06-07