Oracle PL / SQL:从字符串中删除“空格字符”

时间:2011-03-31 20:23:21

标签: regex oracle plsql

在我的Oracle 10g数据库中,我想从表字段的值中删除“空格字符”(空格,制表符,回车符......)。

TRANSLATE()还有什么路要走?例如:

MY_VALUE := TRANSLATE(MY_VALUE,
  CHR(9) || CHR(10) || CHR(11) || CHR(12) || CHR(13) || ' ', '');

还是有更好的选择(PHP PCRE中的[:space:]之类的东西)?

感谢您的任何建议。

6 个答案:

答案 0 :(得分:38)

我会选择regexp_replace,虽然我不是100%确定这在PL / SQL中是可用的

my_value := regexp_replace(my_value, '[[:space:]]*',''); 

答案 1 :(得分:13)

更短的版本:

REGEXP_REPLACE( my_value, '[[:space:]]', '' )

将是:

REGEXP_REPLACE( my_value, '\s')

以上两种说法都不会删除“空”字符。

要删除“nulls”,请使用replace

包含该语句

像这样:

REPLACE(REGEXP_REPLACE( my_value, '\s'), CHR(0))

答案 2 :(得分:7)

由于您对正则表达式感到满意,因此您可能希望使用REGEXP_REPLACE函数。如果你想消除任何与[:space:] POSIX类匹配的东西

REGEXP_REPLACE( my_value, '[[:space:]]', '' )


SQL> ed
Wrote file afiedt.buf

  1  select '|' ||
  2         regexp_replace( 'foo ' || chr(9), '[[:space:]]', '' ) ||
  3         '|'
  4*   from dual
SQL> /

'|'||
-----
|foo|

如果要为每组连续空格字符留出一个空格,只需将+添加到正则表达式并使用空格作为替换字符。

with x as (
  select 'abc 123  234     5' str
    from dual
)
select regexp_replace( str, '[[:space:]]+', ' ' )
  from x

答案 3 :(得分:2)

select regexp_replace('This is a test   ' || chr(9) || ' foo ', '[[:space:]]', '') from dual;

REGEXP_REPLACE
--------------
Thisisatestfoo

答案 4 :(得分:1)

删除您可以使用的任何空格:

myValue := replace(replace(replace(replace(replace(replace(myValue, chr(32)), chr(9)),  chr(10)), chr(11)), chr(12)), chr(13));

示例:删除表中的所有空格:

update myTable t
    set t.myValue = replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13))
where
    length(t.myValue) > length(replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13)));

update myTable t
    set t.myValue = replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13))
where
    t.myValue like '% %'

答案 5 :(得分:1)

要用一个空白替换一个或多个空白字符,您应该使用*而不是insert,否则您将REGEXP_REPLACE( my_value, '[[:space:]]{2,}', ' ' ) 在所有非空白字符之间留空。

    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    ctx.register(ClientConfig.class);
    ctx.refresh();
    SaleOrderClient saleorderclient = ctx.getBean(SaleOrderClient.class);