我们有一个带有varchar2(100)
列的表格,偶尔会包含回车符&行饲料。我们想要删除SQL查询中的那些字符。我们正在使用:
REPLACE( col_name, CHR(10) )
具有无效,但是将“CHR(10)”替换为更传统的“字母”字符可以证明REPLACE函数不起作用。我们还发现了
REPLACE( col_name, CHR(10), '_' )
找到新行的位置,但在其后面插入下划线,而不是替换它。
在Oracle8i上运行。升级不是一种选择。
答案 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))
替换所有CR
和LF
。