是否可以在 MS SQL的 WHERE* 子句中使用 IF 子句? *
例子:
WHERE IF IsNumeric(@OrderNumber) = 1 OrderNumber = @OrderNumber ELSE OrderNumber LIKE '%' + @OrderNumber + '%'
使用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 的额外条件添加到需要应用它的部分。