我们有一个带有varchar2(100)
列的表,偶尔包含回车符和换行符.我们想要删除SQL查询中的那些字符.我们正在使用:
REPLACE( col_name, CHR(10) )
具有没有效果,然而替换"CHR(10)"的更常规的"字母"字符证明REPLACE功能工作否则.我们也发现了
REPLACE( col_name, CHR(10), '_' )
找到换行符的位置,但在其后插入下划线,而不是替换它.
在Oracle8i上运行.升级不是一种选择.
另一种方法是使用TRANSLATE:
TRANSLATE (col_name, 'x'||CHR(10)||CHR(13), 'x')
'x'是您不希望转换为null的任何字符,因为如果第3个参数为null,则TRANSLATE不能正常工作.
啊啊!凯德是有钱的.
TOAD中的工件打印\r\n
为两个占位符"blob"字符,但也打印一个\r
也作为两个占位符.解决方案的第一步是使用..
REPLACE( col_name, CHR(13) || CHR(10) )
..但我选择了稍强一点......
REPLACE(REPLACE( col_name, CHR(10) ), CHR(13) )
..以任何顺序捕获违规字符.我非常感谢凯德.
M.
你确定你的换行符不是CHR(13) + CHR(10)
,在这种情况下,你最终CHR(13) + '_'
会看到换行符吗?
尝试 REPLACE(col_name, CHR(13) + CHR(10), '')
如果数据库中的数据是从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), '')