如何替换 CLOB 列中的 TAB 字符?

How to replace TAB char in a CLOB column?

我一直在寻找解决方案,但找到了 none。

我的简单问题:我有一个带有 CLOB 列的 Oracle12.2 table,这里有 TABS,如何在我的 sqlplus 查询中删除它们?

下面的说明很有效

dbms_lob.substr(L80T2.tridata, 3, 130) ||';'||
dbms_lob.substr(L80T2.tridata, 9, 133) ||';'||
dbms_lob.substr(L80T2.tridata, 20, 161),

但是当我尝试删除标签时

regexp_replace('dbms_lob.substr(L80T2.tridata, 20, 161)', chr(9), ' ',),

我收到错误。

非常感谢任何帮助。

这是我的查询:

select
dbms_lob.substr(L80T2.tridata, 9, 91) ||';'||
dbms_lob.substr(L80T2.tridata, 4, 60) ||';'||
dbms_lob.substr(L80T2.tridata, 24, 100) ||';'||
dbms_lob.substr(L80T2.tridata, 3, 130) ||';'||
dbms_lob.substr(L80T2.tridata, 9, 133) ||';'||
dbms_lob.substr(L80T2.tridata, 20, 161) ||';'||                 
L79T1.trno ||';'|| L79T1.datereg ||';'|| L79T1.trtype ||';'|| L79T1.trstat
from L79T1  
inner join L80T2 on (L80T2.trno = L79T1.trno)
where L79T1.trtype = '518' AND
    L79T1.datereg >= trunc(sysdate) -13 AND
    L79T1.datereg < trunc(sysdate);

这是输出:

P0042842 ;2000;011112G016V3AN0033      ;P02;000065186;25674XX             ;295428109;2020-12-11 15:05:07;518;30
P0042883 ;2000;013494G010QVAN0033      ;P02;000037752;26545XX             ;295428110;2020-12-11 15:05:08;518;30
P0042485 ;2000;011112G016V3AN0033      ;P02;000050610;25668XX             ;295428112;2020-12-11 15:05:09;518;30

copy/paste 中的标签丢失了,抱歉。

会不会是我用的sqlplus输出格式化参数?

SET FEEDBACK OFF
SET ECHO OFF
SET FEED OFF
SET VERIFY OFF
SET HEADING OFF
SET NEWPAGE NONE
SET LINESIZE 300
SET TRIMSPOOL ON
SET BUFFER 10000

只需一个带有两个参数的 REPLACE() 函数就可以解决

这样的问题
SELECT REPLACE(tridata, CHR(9))
  FROM tab

Demo

P.S:用引号括起函数是错字

添加到 Barbaros 的回答中,听起来您想从字段中删除空格(制表符或尾随空格)。在这种情况下,我建议添加 RTRIM,以仅删除右侧的尾随空格:

select
dbms_lob.substr(L80T2.tridata, 9, 91) ||';'||
dbms_lob.substr(L80T2.tridata, 4, 60) ||';'||
RTRIM(REPLACE(dbms_lob.substr(L80T2.tridata, 24, 100), CHR(9))) ||';'||
dbms_lob.substr(L80T2.tridata, 3, 130) ||';'||
dbms_lob.substr(L80T2.tridata, 9, 133) ||';'||
RTRIM(REPLACE(dbms_lob.substr(L80T2.tridata, 20, 161), CHR(9))) ||';'||        
...

如果您知道自己只有空格而没有制表符,则可以单独使用 RTRIM。

Regexp_replace 有点慢,但您可以用它做类似的事情 - 删除尾随空格:

regexp_replace(dbms_lob.substr(L80T2.tridata, 24, 100),'[[:space:]]+$') ||';'||