我们有一个包含varchar2(100)
列的表,其中偶尔包含carriage-return和line-feeds。我们应该删除SQL查询中的这些字符。我们正在使用:
REPLACE( col_name, CHR(10) )
它有没有效果,但是用更传统的'letter'字符替换'CHR(10)'证明REPLACE函数的工作方式不同。我们还发现
REPLACE( col_name, CHR(10), '_' )
查找新行的 * 位置 *,但在其后面 * 插入 * 下划线,而不是替换它。
运行在Oracle 8i上。升级不是一个选择。
6条答案
按热度按时间jtoj6r0c1#
另一种方法是使用TRANSLATE:
'x'是任何你不想翻译成null的字符,因为如果第三个参数为null,TRANSLATE就不能正常工作。
h7appiyu2#
凯德说的没错。
TOAD中的工件将
\r\n
打印为两个占位符'blob'字符,但也将单个\r
打印为两个占位符。解决方案的第一步是使用..但我选择了更结实一点的
..它可以以任何顺序捕获违规字符。非常感谢凯德。
M的。
5anewei63#
你确定你的换行符不是
CHR(13) + CHR(10)
,在这种情况下,你会得到CHR(13) + '_'
,它看起来仍然像一个换行符?试试
REPLACE(col_name, CHR(13) + CHR(10), '')
gzszwxb44#
如果数据库中的数据是从HTML表单TextArea控件POSTED的,则不同的浏览器使用不同的换行符:
Firefox仅使用CHR(10)分隔行
Internet Explorer使用CHR(13)+ CHR(10)分隔行
Apple(pre-OSX)仅使用CHR(13)分隔行
因此,您可能需要以下内容:
nzk0hqpo5#
只是想留个便条。我在格式化一个有自己想法的文本4000字段时遇到了麻烦,文本似乎会在报告上随机换行(或不换行)。当我使用上面提到的replace chr(10)更新列时。我的报告终于按我想要的格式编排了。谢谢!
dpiehjr46#
如果换行符是
CRLF
,这意味着它是CHR(13)
后跟CHR(10)
。如果您使用REPLACE(input, CHR(10), '_')
,则会变成CHR(13)
,后跟一个下划线。由于CR
本身可以像换行符一样呈现,它会 * 看起来 * 好像在换行符之后插入了下划线,但 * 实际上 * 只有一半的换行符被替换。使用
REPLACE(REPLACE(input, CHR(13)), CHR(10))
替换所有CR
和LF
。