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 函数?的主要内容,如果未能解决你的问题,请参考以下文章