我知道 nvl 函数只适用于“null”,而不是空字符串。我只是想知道是否有一个函数可以帮助我用另一个函数替换空值。我用了:
nvl
CASE WHEN expression_1 is null or expression_1 = '' then expression_2 else expression_1
表达式\u 1列有空单元格,而不是空单元格。
6za6bjd01#
NVL() 是最典型的与oracle相关联的函数。等效的标准sql函数是 COALESCE() .默认情况下,oracle将 NULL 字符串和空字符串( '' )一模一样。所以, '' IS NULL 计算结果为“真”(和 '' = '' 相当令人困惑的是 NULL ,在 WHERE 条款)。所以,你可以用 NVL() 或者 COALESCE() 在空字符串上。它们是相同的:
NVL()
COALESCE()
NULL
''
'' IS NULL
'' = ''
WHERE
NVL(NULL, 'A') NVL('', 'A') COALESCE(NULL, 'A') COALESCE('', 'A')
这是一把小提琴。
9w11ddsr2#
如果列包含空格,除了nvl()之外,还可以使用trim(),以便在应用nvl()之前优雅地删除空格。nvl(trim('','x')-->返回xdb<>小提琴-https://dbfiddle.uk/?rdbms=oracle_18&fiddle=08435972cbfb799329e6609349c70a04
edqdpe6u3#
我相信你正在寻找凝聚():
coalesce(expression2, expression1)
从expression2 else expression 1获取第一个非空值。如果所有表达式的计算结果都为null,那么coalesce函数将返回null。nvl函数允许您在遇到空值时替换值:
nvl(expression2, expression1)
如果sql语句在其中发现空值,它将用表达式1替换表达式2。区别:nvl总是计算这两个参数,而coalesce通常在发现第一个非null时停止计算这里@quassnoi给出了一个很好的解释
3条答案
按热度按时间6za6bjd01#
NVL()
是最典型的与oracle相关联的函数。等效的标准sql函数是COALESCE()
.默认情况下,oracle将
NULL
字符串和空字符串(''
)一模一样。所以,'' IS NULL
计算结果为“真”(和'' = ''
相当令人困惑的是NULL
,在WHERE
条款)。所以,你可以用
NVL()
或者COALESCE()
在空字符串上。它们是相同的:这是一把小提琴。
9w11ddsr2#
如果列包含空格,除了nvl()之外,还可以使用trim(),以便在应用nvl()之前优雅地删除空格。
nvl(trim('','x')-->返回x
db<>小提琴-https://dbfiddle.uk/?rdbms=oracle_18&fiddle=08435972cbfb799329e6609349c70a04
edqdpe6u3#
我相信你正在寻找凝聚():
从expression2 else expression 1获取第一个非空值。如果所有表达式的计算结果都为null,那么coalesce函数将返回null。
nvl函数允许您在遇到空值时替换值:
如果sql语句在其中发现空值,它将用表达式1替换表达式2。
区别:nvl总是计算这两个参数,而coalesce通常在发现第一个非null时停止计算
这里@quassnoi给出了一个很好的解释