求助:谢谢大家!
我选择的是一个字段,其中包含一堆丑陋的卡在一起的文字,其中每个'部分'以分号结尾。使用换行符0d0a(crlf)"不可打印"替换分号的方法是什么?字符?我已经搜索过,但大多数人想要相反(从现有文本中删除CR / LF。)
示例:现有 Varchar2字段XYZ包含
等等等等等等等等等等等等等。更多的东西;甚至更多;'
(这不是我控制的,我只有读取权限。)
如果我REPLACE (XYZ,';',' CHAR(13)||CHAR(10)) ')
输出
输出正是如此,没有有效的线路馈电。它实际上增加了characters 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
真的希望有一种方法可以插入HEX或其他东西。还是我坚持做一个循环?相反没有,这是一个来自单独行的结构,其中表设计者应该使用CLOB并且我使用LISTAGG将它们粘贴在一起。
答案 0 :(得分:3)
从CHR()函数调用中删除引号:
REPLACE
编辑:这将替换分号和跟随空格(如果存在):
REPLACE (XYZ, ';', CHR(13)||CHR(10) )
答案 1 :(得分:1)
请勿在{{1}}的{{1}}周围加上引号。
CHR(13)||CHR(10)
也就是说,无论您需要显示数据的前端,都需要能够以您想要的方式读取和解释这些字符(即直观地创建新行)。我们无法保证您的前端会这样做,而不是将它们显示为不可打印的字符或忽略它们。
答案 2 :(得分:0)
select replace(xyz, ';', chr(10)) from dual
答案 3 :(得分:0)
不要加引号。当然。谢谢!我投了票,但我还没有这些权力。 (昨晚在半夜醒来,同样的认识。)谢谢大家!
REPLACE (XYZ, ';', CHR(13)||CHR(10) )
我很难处理用户评论(来自多个用户的时间),这些评论在一起排序的255个字符行中(即使在中间单词中它也会被切断,但每个用户的评论以分号结尾)所以...
REGEXP_REPLACE (
(LISTAGG (ENG2.VALUE, '') WITHIN GROUP (ORDER BY ENG2.VALUE)),
';',
( CHR (13) || CHR (10) ))
然后我把那个放在自动换行功能中。效果很好。看起来不错。再次感谢!
实际上,这不能很好地工作(因为我正在添加CR / LF然后再添加它),所以我将分号的REPLACE放在自动换行功能中并创建了一个特殊选项'O2 '实现这一目标。
SELECT
' ' || F_WORD_WRAP_WF (
(LISTAGG (ENG2.VALUE, '')
WITHIN GROUP (ORDER BY TO_CHAR (ENG2.SEQ) || ENG2.VALUE)),
76,
'O2')
AS Approver_Comment
然后在自动换行功能中:
...以这个结束if语句:
ELSIF p_wf_ob = 'O2'
THEN
line :=
SUBSTR (
REGEXP_REPLACE (NVL (p_textin, ' '),
';',
CHR (13) || CHR (10))
|| pad,
toffset,
p_rmargin);