为了账号安全,请及时绑定邮箱和手机立即绑定

SQL:WHERE子句中的IF子句

SQL:WHERE子句中的IF子句

开满天机 2019-10-15 13:56:51
是否可以在MS SQL 的WHERE子句中使用IF子句?例:WHERE    IF IsNumeric(@OrderNumber) = 1        OrderNumber = @OrderNumber    ELSE        OrderNumber LIKE '%' + @OrderNumber + '%'
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

使用CASE语句

UPDATE:先前的语法(如少数人指出的那样)不起作用。您可以按以下方式使用CASE:


WHERE OrderNumber LIKE

  CASE WHEN IsNumeric(@OrderNumber) = 1 THEN 

    @OrderNumber 

  ELSE

    '%' + @OrderNumber

  END

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


查看完整回答
反对 回复 2019-10-15
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

您应该能够在没有任何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的额外条件添加到需要应用它的部分。


查看完整回答
反对 回复 2019-10-15
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

您根本不需要IF语句。


WHERE

    (IsNumeric(@OrderNumber) = 1 AND OrderNumber = @OrderNumber)

OR (IsNumeric(@OrderNumber) = 0 AND OrderNumber LIKE '%' + @OrderNumber + '%')


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 3028 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信