Oracle REPLACE()函数不处理回车和&行供稿

时间:2009-01-02 15:11:36

标签: sql oracle

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

REPLACE( col_name, CHR(10) ) 

具有无效,但是将“CHR(10)”替换为更传统的“字母”字符可以证明REPLACE函数不起作用。我们还发现了

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

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

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

6 个答案:

答案 0 :(得分:41)

另一种方法是使用TRANSLATE

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

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

答案 1 :(得分:23)

AHAH!凯德很有钱。

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

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

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

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

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

微米。

答案 2 :(得分:13)

您确定换行符不是CHR(13) + CHR(10),在这种情况下,您最终会看到CHR(13) + '_',这可能看起来像换行符吗?

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

答案 3 :(得分:7)

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

答案 4 :(得分:1)

只是想放一张便条。我无法格式化具有自己思想的文本4000字段,并且文本会在报告上随机包裹(或不包裹)。当我使用上面提到的替换chr(10)更新列时。我的报告最终格式化为我想要的。很多Thanx!

答案 5 :(得分:0)

如果换行符为CRLF,则表示CHR(13)后跟CHR(10)。如果您REPLACE(input, CHR(10), '_'),则变为CHR(13)后跟下划线。由于CR本身就可以像换行符一样呈现,它会显示,就像你的换行符后插入下划线一样,但实际< / em>只有一半的换行符已被替换。

使用REPLACE(REPLACE(input, CHR(13)), CHR(10))替换所有CRLF