3 回答
TA贡献2041条经验 获得超4个赞
使用CASE语句
UPDATE:先前的语法(如少数人指出的那样)不起作用。您可以按以下方式使用CASE:
WHERE OrderNumber LIKE
CASE WHEN IsNumeric(@OrderNumber) = 1 THEN
@OrderNumber
ELSE
'%' + @OrderNumber
END
或者您可以使用@NJ Reed指出的IF语句。
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的额外条件添加到需要应用它的部分。
TA贡献1802条经验 获得超6个赞
您根本不需要IF语句。
WHERE
(IsNumeric(@OrderNumber) = 1 AND OrderNumber = @OrderNumber)
OR (IsNumeric(@OrderNumber) = 0 AND OrderNumber LIKE '%' + @OrderNumber + '%')
- 3 回答
- 0 关注
- 3028 浏览
添加回答
举报