【问题标题】:nvl function not returning expected resultnvl 函数未返回预期结果
【发布时间】:2020-07-20 23:30:23
【问题描述】:

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

我改用了:

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

expression_1 列有空单元格,而不是空单元格。

【问题讨论】:

  • 假设 Oracle,nvl() 似乎可以处理空字符串:dbfiddle.uk/… 也许您的字符串并不是真正的空,而是一堆空格?
  • 用您正在使用的数据库标记您的问题。

标签: sql function nvl


【解决方案1】:

NVL() 是最常与 Oracle 关联的函数。等效的标准 SQL 函数是COALESCE()

默认情况下,Oracle 将 NULL 字符串和空字符串 ('') 视为相同。因此,'' IS NULL 的计算结果为“真”(而 '' = '' 的计算结果令人困惑的是 NULL,这在 WHERE 子句中为假)。

因此,您可以在空字符串上使用NVL()COALESCE()。这些都是一样的:

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

Here 是一个 dbfiddle。

【讨论】:

    【解决方案2】:

    如果列包含空格,您可以在 NVL() 之外使用 TRIM(),以便在应用 NVL() 之前优雅地删除空格。

    NVL(TRIM(' '),'X') --> 返回 X

    db小提琴 - https://dbfiddle.uk/?rdbms=oracle_18&fiddle=08435972cbfb799329e6609349c70a04

    【讨论】:

      【解决方案3】:

      相信你在找Coalesce():

      coalesce(expression2, expression1)
      

      从表达式 2 中获取第一个非空值,否则为表达式 1。如果所有表达式的计算结果为 null,则 COALESCE 函数将返回 null。

      NVL 函数允许您在遇到空值时替换一个值:

      nvl(expression2, expression1)
      

      如果Sql语句在其中找到空值,则将表达式2替换为表达式1。

      区别:NVL 总是评估两个参数,而 COALESCE 通常在找到第一个非 NULL 时停止评估

      @Quassnoi here 给出的一个很棒的解释

      【讨论】:

        猜你喜欢
        • 2018-12-16
        • 2018-09-29
        • 1970-01-01
        • 1970-01-01
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        • 2010-09-22
        相关资源
        最近更新 更多