nvl函数未返回预期结果

lg40wkob  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(469)

我知道 nvl 函数只适用于“null”,而不是空字符串。我只是想知道是否有一个函数可以帮助我用另一个函数替换空值。
我用了:

CASE WHEN expression_1 is null or expression_1 = '' then expression_2 else expression_1

表达式\u 1列有空单元格,而不是空单元格。

6za6bjd0

6za6bjd01#

NVL() 是最典型的与oracle相关联的函数。等效的标准sql函数是 COALESCE() .
默认情况下,oracle将 NULL 字符串和空字符串( '' )一模一样。所以, '' IS NULL 计算结果为“真”(和 '' = '' 相当令人困惑的是 NULL ,在 WHERE 条款)。
所以,你可以用 NVL() 或者 COALESCE() 在空字符串上。它们是相同的:

NVL(NULL, 'A')
NVL('', 'A')
COALESCE(NULL, 'A')
COALESCE('', 'A')

这是一把小提琴。

9w11ddsr

9w11ddsr2#

如果列包含空格,除了nvl()之外,还可以使用trim(),以便在应用nvl()之前优雅地删除空格。
nvl(trim('','x')-->返回x
db<>小提琴-https://dbfiddle.uk/?rdbms=oracle_18&fiddle=08435972cbfb799329e6609349c70a04

edqdpe6u

edqdpe6u3#

我相信你正在寻找凝聚():

coalesce(expression2, expression1)

从expression2 else expression 1获取第一个非空值。如果所有表达式的计算结果都为null,那么coalesce函数将返回null。
nvl函数允许您在遇到空值时替换值:

nvl(expression2, expression1)

如果sql语句在其中发现空值,它将用表达式1替换表达式2。
区别:nvl总是计算这两个参数,而coalesce通常在发现第一个非null时停止计算
这里@quassnoi给出了一个很好的解释

相关问题