Oracle SQL:如何用CR/LF替换现有VARCHAR2字段中的字符

Oracle SQL:如何用CR/LF替换现有VARCHAR2字段中的字符,sql,string,oracle,carriage-return,linefeed,Sql,String,Oracle,Carriage Return,Linefeed,解决:谢谢大家 我从一个字段中选择,这个字段有一堆难看的挤在一起的文本,每个“部分”以分号结尾。用换行0d0a(crlf)“不可打印”字符替换分号的方法是什么?我已经搜索过了,但大多数人想要相反的结果(从现有文本中删除CR/LF) 示例:现有的Varchar2字段XYZ包含 “废话废话;还有更多的东西;甚至更多 (这不是我能控制的东西,我只是有阅读权限。) 如果我在输出上替换(XYZ,“;”,“CHAR(13)| | CHAR(10)) 输出就是这样,没有活动的线路馈电。它字面上添加了字符CHA

解决:谢谢大家

我从一个字段中选择,这个字段有一堆难看的挤在一起的文本,每个“部分”以分号结尾。用换行0d0a(crlf)“不可打印”字符替换分号的方法是什么?我已经搜索过了,但大多数人想要相反的结果(从现有文本中删除CR/LF)

示例:现有的Varchar2字段XYZ包含

“废话废话;还有更多的东西;甚至更多

(这不是我能控制的东西,我只是有阅读权限。)

如果我
在输出上替换(XYZ,“;”,“CHAR(13)| | CHAR(10))
输出就是这样,没有活动的线路馈电。它字面上添加了
字符CHAR(13)| | CHAR(10))
,而不是CR/LF的函数。像这样:

Select REPLACE(XYZ',';','CHAR(13)||CHAR(10)') from XYZTable;
不想要的结果:

'blah blah blah CHAR(13)||CHAR(10)) and more stuff CHAR(13)||CHAR(10)) and even more CHAR(13)||CHAR(10))'
我希望在输出中看到的内容:

blah blah blah
and more stuff
and even more

真希望有办法插入十六进制之类的东西。还是我被困在做循环?相反,这是一个从带有序列的单独行构建的结构,其中表设计器应该使用CLOB,我使用Listag将其粘贴在一起。

不要在
替换
中的
CHR(13)| CHR(10)
周围加引号

select replace(xyz, ';',  chr(10)) from dual
REPLACE (XYZ, ';', CHR(13)||CHR(10) )

也就是说,无论前端需要显示什么数据,都需要能够以您想要的方式读取和解释这些字符(即,可视化地创建新行)。不能保证前端会这样做,而不是将它们显示为不可打印的字符或忽略它们。

不要在
替换中的
CHR(13)| | CHR(10)
周围加引号

REPLACE (XYZ, ';', CHR(13)||CHR(10) )

也就是说,无论前端需要显示什么数据,都需要能够以您想要的方式读取和解释这些字符(即,可视化地创建新行)。不能保证前端会这样做,而不是将它们显示为不可打印的字符或忽略它们。

删除CHR()函数调用中的引号:

with tbl(text) as
(
select 'blah blah blah; and more stuff; and even more;' from dual
)
select replace(text, ';', chr(13)||chr(10)) from tbl;
编辑:这将替换分号和以下空白(如果存在):

with tbl(text) as
(
select 'blah blah blah; and more stuff;and even more;' from dual
)
select regexp_replace(text, ';\s?', chr(13)||chr(10)) from tbl;

删除CHR()函数调用周围的引号:

with tbl(text) as
(
select 'blah blah blah; and more stuff; and even more;' from dual
)
select replace(text, ';', chr(13)||chr(10)) from tbl;
编辑:这将替换分号和以下空白(如果存在):

with tbl(text) as
(
select 'blah blah blah; and more stuff;and even more;' from dual
)
select regexp_replace(text, ';\s?', chr(13)||chr(10)) from tbl;

不要加引号。当然谢谢我会投赞成票,但我还没有这些权力。(半夜醒来,同样的体会。)谢谢大家!p>
REPLACE (XYZ, ';', CHR(13)||CHR(10) )
我一直在处理用户的评论(随着时间的推移,来自多个用户的评论),这些评论排成255个字符(即使在单词中间也会被截断,但每个用户的评论都以分号结尾),所以

然后我把它放在一个单词包装函数中。效果很好。看起来不错。再次感谢

事实上,这并没有起到很好的作用(因为我正在添加CR/LF,然后再次添加它),所以我将分号的替换放在wordwrap函数中,并创建了一个特殊选项“O2”来实现这一点

  SELECT 
     ' ' ||    F_WORD_WRAP_WF (
            (LISTAGG (ENG2.VALUE, '')
                WITHIN GROUP (ORDER BY TO_CHAR (ENG2.SEQ) || ENG2.VALUE)),
            76,
            'O2')
            AS Approver_Comment
然后在word wrap函数中:

。。。使用以下命令结束if语句:

  ELSIF p_wf_ob = 'O2'
  THEN
     line :=
        SUBSTR (
              REGEXP_REPLACE (NVL (p_textin, ' '),
                              ';',
                              CHR (13) || CHR (10))
           || pad,
           toffset,
           p_rmargin);

不要加引号。当然谢谢我会投赞成票,但我还没有这些权力。(半夜醒来,同样的体会。)谢谢大家!p>
REPLACE (XYZ, ';', CHR(13)||CHR(10) )
我一直在处理用户的评论(随着时间的推移,来自多个用户的评论),这些评论排成255个字符(即使在单词中间也会被截断,但每个用户的评论都以分号结尾),所以

然后我把它放在一个单词包装函数中。效果很好。看起来不错。再次感谢

事实上,这并没有起到很好的作用(因为我正在添加CR/LF,然后再次添加它),所以我将分号的替换放在wordwrap函数中,并创建了一个特殊选项“O2”来实现这一点

  SELECT 
     ' ' ||    F_WORD_WRAP_WF (
            (LISTAGG (ENG2.VALUE, '')
                WITHIN GROUP (ORDER BY TO_CHAR (ENG2.SEQ) || ENG2.VALUE)),
            76,
            'O2')
            AS Approver_Comment
然后在word wrap函数中:

。。。使用以下命令结束if语句:

  ELSIF p_wf_ob = 'O2'
  THEN
     line :=
        SUBSTR (
              REGEXP_REPLACE (NVL (p_textin, ' '),
                              ';',
                              CHR (13) || CHR (10))
           || pad,
           toffset,
           p_rmargin);

这个问题的一个变体(用空格替换CR/LF)是我不久前遇到的。它确实有ASCII十六进制方法。有很多类似的帖子,顺便说一句,“解决了”?如果在这里发布的答案之一解决了您的问题,请接受它。如果你用不同的方法解决了它,你应该自己发布并接受它。请帮助其他求职者成为一个有价值的资源。“如果这里发布的答案之一解决了你的问题,请接受它。”很高兴这么做,但不知道怎么做。如果你没有更多的“分数”,我就不能“投票”,我不久前遇到的这个问题的变体(用空格代替CR/LF)就在这里。它确实有ASCII十六进制方法。有很多类似的帖子,顺便说一句,“解决了”?如果在这里发布的答案之一解决了您的问题,请接受它。如果你用不同的方法解决了它,你应该自己发布并接受它。请帮助其他求职者成为一个有价值的资源。“如果这里发布的答案之一解决了你的问题,请接受它。”很高兴这么做,但不知道怎么做。如果没有更多的“分数”,我就不能“投赞成票”