【问题标题】:Concatenate multiple values and removing characaters when null连接多个值并在 null 时删除字符
【发布时间】:2018-11-28 18:08:17
【问题描述】:

我有以下查询

select id, CORD.LABEL ||' ('|| CORD.INTERVENT_TYPE || ')' ||' '||REFER.LABEL ||' ('|| REFER.INTERVENT_TYPE || ')'||' '|| INTER.LABEL ||' ('|| INTERVENT_TYPE || ')' AS INTERVEN_TYPE
from tableA

这将产生以下结果。

ID    INTERVEN_TYPE
1      () () Education(Other)

我只想在值不为空时显示结果。我希望看到。

ID    INTERVEN_TYPE
1     Education(Other)

我尝试过 case 表达式、nvl 和 coalesce。由于我无法创建正确的语法,哪一个效果最好?

【问题讨论】:

    标签: sql oracle concatenation concat


    【解决方案1】:

    CASE:

    select 
    id, 
    TRIM(
    CASE CORD.LABEL ||'('|| CORD.INTERVENT_TYPE || ')' 
        WHEN '()' THEN ''
        ELSE CORD.LABEL ||' ('|| CORD.INTERVENT_TYPE || ')' 
    END 
    ||' '||
    CASE REFER.LABEL ||'('|| REFER.INTERVENT_TYPE || ')'
        WHEN '()' THEN ''
        ELSE REFER.LABEL ||' ('|| REFER.INTERVENT_TYPE || ')'
    END 
    ||' '|| 
    CASE INTER.LABEL ||'('|| INTERVENT_TYPE || ')'
        WHEN '()' THEN ''
        ELSE INTER.LABEL ||' ('|| INTERVENT_TYPE || ')'
    END 
    )
    AS INTERVEN_TYPE
    from tableA
    

    我现在从左括号中删除了 1 个空格。
    编辑:添加了 TRIM 功能。
    如果你用REPLACE 消除(),也许这也行得通:

    select 
    id, TRIM(
    REPLACE(CORD.LABEL ||' ('|| CORD.INTERVENT_TYPE || ')', '()')
    ||' '||
    REPLACE(REFER.LABEL ||' ('|| REFER.INTERVENT_TYPE || ')', '()')
    ||' '|| 
    REPLACE(INTER.LABEL ||' ('|| INTERVENT_TYPE || ')', '()')
    ) 
    AS INTERVEN_TYPE
    from tableA
    

    【讨论】:

      猜你喜欢
      • 2019-08-29
      • 1970-01-01
      • 2015-09-01
      • 2016-06-12
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 2019-01-13
      • 2022-11-10
      相关资源
      最近更新 更多