DB2 SQL 中的 IsNull 函数?

Posted

技术标签:

【中文标题】DB2 SQL 中的 IsNull 函数?【英文标题】:IsNull function in DB2 SQL? 【发布时间】: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

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于DB2 SQL 中的 IsNull 函数?的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL server中的isnull函数

sql 中isnull函数的用法

isnull函数

使用函数拆分 db2 表中的数据

SQL - DB2 中的 UPPER 函数不起作用

LINQ 中的 SQL ISNULL 等价物?