如何删除/避免SQL输出中的特定字符串

时间:2017-04-13 09:23:55

标签: sql oracle

以下是SQL查询:

select '"'|| trim(COLUMN1) ||'"|"'|| trim(COLUMN2) ||'"|"'|| trim(COLUMN3) ||'"'
from TABLE1 where ....

我得到的输出是:

"DATA1"|""|"DATA3"

"DATA4"|""|"DATA6"

但是,我想让它显示如下输出:

"DATA1"||"DATA3"

"DATA4"||"DATA6"

这意味着,如果特定列有一些空值,则它不能显示""。我希望你们都明白了。 请帮我实现这一目标,因为我正在自动化这个过程,输出文件直接进入目标应用程序(即我无法手动修改它)。 谢谢!

4 个答案:

答案 0 :(得分:2)

如果列为case

,您可以使用null来避免打印任何内容
select  '"'|| trim(COLUMN1) || '"|' ||
        case when COLUMN2 is null then '' else '"' || trim(COLUMN2) || '"' end
       || '|"' || trim(COLUMN3) ||'"'
from TABLE1 where ....

答案 1 :(得分:1)

您可以使用NVL2( value, value_if_not_null, value_if_null )

SELECT NVL2( COLUMN1, '"' || TRIM( COLUMN1 ) || '"', NULL )
       || '|' || NVL2( COLUMN2, '"' || TRIM( COLUMN2 ) || '"', NULL )
       || '|' || NVL2( COLUMN3, '"' || TRIM( COLUMN3 ) || '"', NULL )
FROM   table1
WHERE  -- ...

CASE

SELECT CASE WHEN COLUMN1 IS NOT NULL THEN '"' || TRIM( COLUMN1 ) || '"' END
       || '|' || CASE WHEN COLUMN2 IS NOT NULL THEN '"' || TRIM( COLUMN2 ) || '"' END
       || '|' || CASE WHEN COLUMN3 IS NOT NULL THEN '"' || TRIM( COLUMN3 ) || '"' END
FROM   table1
WHERE  -- ...

答案 2 :(得分:0)

替换功能

select replace('"'|| trim(COLUMN1) ||'"|"'|| trim(COLUMN2) ||'"|"'|| trim(COLUMN3) ||'"', '""','')
from TABLE1 where ....

答案 3 :(得分:0)

使用

REPLACE(String, '""', '')

select REPLACE('"'|| trim(COLUMN1) ||'"|"'|| trim(COLUMN2) ||'"|"'|| trim(COLUMN3) ||'"', '""', '') from TABLE1 where ....