Oracle REPLACE()函数不处理回车和换行

jucafojl  于 2023-05-16  发布在  Oracle
关注(0)|答案(6)|浏览(107)

我们有一个包含varchar2(100)列的表,其中偶尔包含carriage-return和line-feeds。我们应该删除SQL查询中的这些字符。我们正在使用:

REPLACE( col_name, CHR(10) )

它有没有效果,但是用更传统的'letter'字符替换'CHR(10)'证明REPLACE函数的工作方式不同。我们还发现

REPLACE( col_name, CHR(10), '_' )

查找新行的 * 位置 *,但在其后面 * 插入 * 下划线,而不是替换它。
运行在Oracle 8i上。升级不是一个选择。

jtoj6r0c

jtoj6r0c1#

另一种方法是使用TRANSLATE:

TRANSLATE (col_name, 'x'||CHR(10)||CHR(13), 'x')

'x'是任何你不想翻译成null的字符,因为如果第三个参数为null,TRANSLATE就不能正常工作。

h7appiyu

h7appiyu2#

凯德说的没错。
TOAD中的工件将\r\n打印为两个占位符'blob'字符,但也将单个\r打印为两个占位符。解决方案的第一步是使用..

REPLACE( col_name, CHR(13) || CHR(10) )

但我选择了更结实一点的

REPLACE(REPLACE( col_name, CHR(10) ), CHR(13) )

..它可以以任何顺序捕获违规字符。非常感谢凯德。
M的。

5anewei6

5anewei63#

你确定你的换行符不是CHR(13) + CHR(10),在这种情况下,你会得到CHR(13) + '_',它看起来仍然像一个换行符?
试试REPLACE(col_name, CHR(13) + CHR(10), '')

gzszwxb4

gzszwxb44#

如果数据库中的数据是从HTML表单TextArea控件POSTED的,则不同的浏览器使用不同的换行符:
Firefox仅使用CHR(10)分隔行
Internet Explorer使用CHR(13)+ CHR(10)分隔行
Apple(pre-OSX)仅使用CHR(13)分隔行
因此,您可能需要以下内容:

set col_name = replace(replace(col_name, CHR(13), ''), CHR(10), '')
nzk0hqpo

nzk0hqpo5#

只是想留个便条。我在格式化一个有自己想法的文本4000字段时遇到了麻烦,文本似乎会在报告上随机换行(或不换行)。当我使用上面提到的replace chr(10)更新列时。我的报告终于按我想要的格式编排了。谢谢!

dpiehjr4

dpiehjr46#

如果换行符是CRLF,这意味着它是CHR(13)后跟CHR(10)。如果您使用REPLACE(input, CHR(10), '_'),则会变成CHR(13),后跟一个下划线。由于CR本身可以像换行符一样呈现,它会 * 看起来 * 好像在换行符之后插入了下划线,但 * 实际上 * 只有一半的换行符被替换。
使用REPLACE(REPLACE(input, CHR(13)), CHR(10))替换所有CRLF

相关问题