当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《OracleREPLACE()函数不处理回车和换行》经验,为你挑选了4个好方法。

我们有一个带有varchar2(100)列的表,偶尔包含回车符和换行符.我们想要删除SQL查询中的那些字符.我们正在使用:

REPLACE( col_name, CHR(10) ) 

具有没有效果,然而替换"CHR(10)"的更常规的"字母"字符证明REPLACE功能工作否则.我们也发现了

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

找到换行符的位置,但在其后插入下划线,而不是替换它.

在Oracle8i上运行.升级不是一种选择.



1> Tony Andrews..:

另一种方法是使用TRANSLATE:

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

'x'是您不希望转换为null的任何字符,因为如果第3个参数为null,则TRANSLATE不能正常工作.


如果你写`TRANSLATE(col_name,CHR(10)|| CHR(13),null)`那么它将无法工作 - 它将始终返回NULL(一个零处理的怪癖).如果你写`TRANSLATE(col_name,CHR(10)|| CHR(13),'x')`那么它会将每个CHR(10)转换为'x',这不是你想要的.如果我们在两个参数前加上'x',那么它会将'x'转换为'x'而将CHR(10),CHR(13)转换为null,从而得到所需的结果.

2> Martin Cowie..:

啊啊!凯德是有钱的.

TOAD中的工件打印\r\n为两个占位符"blob"字符,但也打印一个\r也作为两个占位符.解决方案的第一步是使用..

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

..但我选择了稍强一点......

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

..以任何顺序捕获违规字符.我非常感谢凯德.

M.



3> Cade Roux..:

你确定你的换行​​符不是CHR(13) + CHR(10),在这种情况下,你最终CHR(13) + '_'会看到换行符吗?

尝试 REPLACE(col_name, CHR(13) + CHR(10), '')



4> Gordon Bell..:

如果数据库中的数据是从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), '')

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有