是否有可能在mssql的WHERE子句中使用IF子句?

例子:

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

当前回答

我认为在……情况下……可以使用布尔值。我正在使用T-SQL。

场景:假设如果bool为假,你想获取Person-30的爱好,如果bool为真,你想获取Person-42的爱好。(根据一些人的说法,业余爱好查找占了90%以上的商业计算周期,所以要密切关注。)

CREATE PROCEDURE sp_Case
@bool   bit
AS
SELECT Person.Hobbies
FROM Person
WHERE Person.ID = 
    case @bool 
        when 0 
            then 30
        when 1
            then 42
    end;

其他回答

使用CASE语句而不是IF语句。

WHERE (IsNumeric(@OrderNumber) <> 1 OR OrderNumber = @OrderNumber) 
             AND (IsNumber(@OrderNumber) = 1 OR OrderNumber LIKE '%' 
                                              + @OrderNumber + '%')
    WHERE OrderNumber LIKE CASE WHEN IsNumeric(@OrderNumber) = 1 THEN @OrderNumber ELSE  '%' + @OrderNumber END

In line case条件将正常工作。

CASE语句总是比IF语句更好的选择。

  WHERE  vfl.CreatedDate >= CASE WHEN @FromDate IS NULL THEN vfl.CreatedDate ELSE  @FromDate END
    AND vfl.CreatedDate<=CASE WHEN @ToDate IS NULL THEN vfl.CreatedDate ELSE @ToDate END 

在sql server中,我有同样的问题,我想使用一个和语句,只有当参数为假,对真,我必须显示两个值真和假,所以我用这种方式使用它

(T.IsPublic = @ShowPublic or  @ShowPublic = 1)