【问题标题】:IsNull function in DB2 SQL?DB2 SQL 中的 IsNull 函数?
【发布时间】:2010-09-09 01:37:50
【问题描述】:

是否有与 DB2 的 isnull 函数等效的性能?

假设我们的一些产品是内部产品,所以它们没有名称:

Select product.id, isnull(product.name, "Internal) 
From product

可能会返回:

1 Socks 
2 Shoes 
3 Internal 
4 Pants

【问题讨论】:

    标签: sql null db2


    【解决方案1】:

    我不熟悉 DB2,但是您尝试过 COALESCE 吗?

    即:

    
    SELECT Product.ID, COALESCE(product.Name, "Internal") AS ProductName
    FROM Product
    

    【讨论】:

      【解决方案2】:

      COALESCE 功能相同 ISNULL 功能 笔记。您必须使用 COALESCE 函数与您检查为空的列的相同数据类型。

      【讨论】:

        【解决方案3】:

        我认为COALESCE 的功能与isnull 部分相似,但请尝试一下。

        你为什么不通过应用程序去处理空值功能,它是更好的选择。

        【讨论】:

        • COALESCE 的不同之处在于您可以为其提供可变数量的参数,并且它将返回第一个非空值,并具有可选的默认值。因此,如果我有 varA、varB 和 VarC 中的任何一个都可能为空(假设它们来自外部连接中的不同表)并且如果全部为空我想要一个空字符串,我可以使用 COALESCE(varA,varB,varC,' ') 并获取其中第一个不为空的,或者如果它们都为空,则为空字符串。 IFNULL(T-SQL 中的 ISNULL)是全有或全无。
        【解决方案4】:

        就其价值而言,COALESCE 是相似的,但

        IFNULL(expr1, default)
        

        是您在 DB2 中寻找的完全匹配。

        COALESCE 允许多个参数,返回第一个 NON NULL 表达式,而 IFNULL 只允许表达式和默认值。

        这样

        SELECT product.ID, IFNULL(product.Name, "Internal") AS ProductName
        FROM Product
        

        为您提供您正在寻找的内容以及之前的答案,只是为了完整性而添加。

        【讨论】:

        • +1 用于为 IsNull 语句提供 exact 匹配。我也投票赞成接受的答案,但我使用的是你的。谢谢!
        【解决方案5】:
        Select Product.ID, VALUE(product.Name, "Internal") AS ProductName from Product
        

        【讨论】:

        • 呃,是的。但是,请注意 VALUE(...) is a synonym for COALESCE(...);优化器可能正在为您换掉呼叫。就个人而言,我建议尽可能避免使用非 ANSI 语义(即,改用 COALESCE(...))。
        【解决方案6】:

        在 DB2 中有一个函数 NVL(field, value if null)。

        例子:

        SELECT ID, NVL(NAME, "Internal) AS NAME, NVL(PRICE,0) AS PRICE FROM PRODUCT WITH UR;

        【讨论】:

          【解决方案7】:

          希望这可能对其他人有所帮助

            SELECT 
          .... FROM XXX XX
          WHERE
          ....
          AND(
                 param1 IS NULL
                 OR XX.param1 = param1
                 )
          

          【讨论】:

            【解决方案8】:

            如果您需要使用 if/else,另一种选择是:

            NVL2 (string_to_be_tested, string_if_not_null, string_if_null);
            

            即:

            SELECT product.ID, NVL2(product.Name, "Internal", "External") AS ProductName
            FROM Product;
            

            【讨论】:

              猜你喜欢
              • 2017-06-03
              • 1970-01-01
              • 1970-01-01
              • 2013-08-07
              • 2010-09-15
              • 2018-11-11
              • 1970-01-01
              • 2017-04-19
              • 2012-04-15
              相关资源
              最近更新 更多