替换空格,制表符和回车符

时间:2013-08-08 14:38:26

标签: sql oracle select replace

我正在使用Oracle 11g的SQL开发人员。我的查询看起来与此类似;

SELECT [column], [column], [column],...... rs.notes
FROM [table], [table], [table]............ return_sku rs
WHERE [conditions] AND [conditions] AND [conditions]

return_sku列中有标签,空格和换行符(我相信这是一个回车符?)我需要在运行查询时使所有这些空格,回车符和制表符消失。 / p>

我对SQL很新,但我找到的最流行的搜索结果是REPLACE函数。我完全不知道如何使用它,因为我已经以许多不同的方式尝试了这一点而没有结果。我尝试了以下内容;

SELECT [column], [column], [column],...... REPLACE(rs.notes, Char(10), '')
FROM [table], [table], [table]............ return_sku rs
WHERE [conditions] AND [conditions] AND [conditions]

这会显示错误消息:

ORA-00904: "RS"."NOTES": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 3 Column: 531

如何正确使用此功能?

2 个答案:

答案 0 :(得分:8)

在Oracle中,如果你只想删除一个字符,你可以省略replace调用的第三个参数,字符代码的函数是chr(),而不是char()。

因此,您的行将是SELECT ... replace(rs.notes,chr(10)) ...

答案 1 :(得分:4)

这不涉及ORA-00904,我怀疑这是一个错字,但如果没有看到真正的代码就无法真正说出来。但是如果你需要删除几个字符,你可以进行嵌套替换:

with return_sku as (
    select 'This is '||chr(9)|| ' a split'||chr(10)||chr(13)||'line' as notes
    from dual
)
select replace(replace(replace(replace(rs.notes, chr(10)), chr(13)), chr(9)), ' ')
from return_sku rs;

REPLACE(REPLACE(
----------------
Thisisasplitline

...但regexp_replace可能更容易管理,如果可能更贵一点:

with return_sku as (
    select 'This is '||chr(9)|| ' a split'||chr(10)||chr(13)||'line' as notes
    from dual
)
select regexp_replace(rs.notes, '[ '||chr(10)||chr(13)||chr(9)||']')
from return_sku rs;

REGEXP_REPLACE(R
----------------
Thisisasplitline

我在两者中都包含了换行符(chr(10))和回车符(chr(13));可能是矫枉过正的。但是如果你想删除任何空格,这就更简单了:

select regexp_replace(rs.notes, '\s') ...

或Posix版本:

select regexp_replace(rs.notes, '[[:space:]]') ...

正如@randcd指出的那样,如果replaceregexp_replace的第三个参数为null(或者是一个空字符串,与Oracle中的null相同)那么你不需要提供它