猿问

SQL:WHERE子句中的IF子句

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


例:


WHERE

    IF IsNumeric(@OrderNumber) = 1

        OrderNumber = @OrderNumber

    ELSE

        OrderNumber LIKE '%' + @OrderNumber + '%'


开满天机
浏览 3107回答 3
3回答

缥缈止盈

使用CASE语句UPDATE:先前的语法(如少数人指出的那样)不起作用。您可以按以下方式使用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的额外条件添加到需要应用它的部分。

呼啦一阵风

您根本不需要IF语句。WHERE    (IsNumeric(@OrderNumber) = 1 AND OrderNumber = @OrderNumber)OR (IsNumeric(@OrderNumber) = 0 AND OrderNumber LIKE '%' + @OrderNumber + '%')
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答