【问题标题】:In Where clause add check if Parameter is empty string在 Where 子句中添加检查参数是否为空字符串
【发布时间】:2015-03-07 17:12:33
【问题描述】:

我必须在 SQL 中编写将返回帐户 ID 的查询。

对于这个查询,我有输入参数,可以为空。

在数据库中,这里是某些字段为空或为空的行。因此,如果参数为空,我还需要检查字段是否为空。

SELECT a.Account_ID   
    FROM Accounts a
    WHERE a.FirstName = @FirstName /*Add check if @FirstName = '' then a.FirstName IS NULL */ 
        AND a.LastName = @LastName 
        AND a.Middle = @MiddleName
        AND a.Email = @Email 
        AND a.Company = @Company

【问题讨论】:

    标签: sql select conditional-statements sql-server-2014


    【解决方案1】:

    我认为这是您需要的条件:

    SELECT a.Account_ID   
        FROM Accounts a
        WHERE ((@FirstName='' and a.FirstName is null) or a.FirstName = @FirstName) /*Add check if @FirstName = '' then a.FirstName IS NULL */ 
            AND a.LastName = @LastName 
            AND a.Middle = @MiddleName
            AND a.Email = @Email 
            AND a.Company = @Company
    

    【讨论】:

    • 我喜欢你的回答。即使与@gordatron 的答案几乎相同,我认为检查(@firstname != '' AND a.FirstName = @FirstName) 是必要的
    • @demo 我不这么认为。如果@firstname !='' 查询的第一部分返回 false 并且第二部分被执行。如果(@firstname ='' 只会执行第一部分。
    • 所以@gordatron 回答涵盖所有情况?
    • 在我看来,这两个查询应该给你相同的结果。
    【解决方案2】:

    如果我想要空参数的特殊行为,我通常会这样做:

    SELECT a.Account_ID   
    FROM Accounts a
    WHERE 
     (
         (@firstname != '' AND a.FirstName = @FirstName) 
         OR (@firstname = '' AND a.FirstName is null)
     )
     AND a.LastName = @LastName AND a.Middle = @MiddleName
     AND a.Email = @Email AND a.Company = @Company
    

    我有一个括号 OR 专门处理 param = '' 和 param != '' 的情况。

    【讨论】:

      【解决方案3】:

      不确定我是否理解这个问题,但这有帮助吗?

      SELECT a.Account_ID   
      FROM Accounts a
      WHERE ISNULL(a.FirstName,'') = @FirstName 
          AND a.LastName = @LastName 
          AND a.Middle = @MiddleName
          AND a.Email = @Email 
          AND a.Company = @Company
      

      【讨论】:

        【解决方案4】:

        试试这个:

        SELECT a.Account_ID   
        FROM Accounts a
        WHERE 1 = (CASE WHEN @FirstName != '' AND a.FirstName = @FirstName THEN 1 
                        WHEN @FirstName = '' AND a.FirstName IS NULL THEN 1 
                        ELSE 0 
                   END) AND 
              a.LastName = @LastName AND 
              a.Middle = @MiddleName AND 
              a.Email = @Email AND 
              a.Company = @Company
        

        【讨论】:

          【解决方案5】:

          case 子句也可以用在 where 条件中,也可以用在选定字段列表中:

          SELECT a.Account_ID   
              FROM Accounts a
              WHERE case when @FirstName = '' then a.FirstName = @FirstName 
                         else a.FirstName IS NULL 
                    end
                AND a.LastName = @LastName 
                AND a.Middle = @MiddleName
                AND a.Email = @Email 
                AND a.Company = @Company
          

          【讨论】:

            猜你喜欢
            • 2011-11-22
            • 1970-01-01
            • 1970-01-01
            • 2011-05-23
            • 2015-06-12
            • 1970-01-01
            • 1970-01-01
            • 2023-01-29
            相关资源
            最近更新 更多