在我的Oracle 10g数据库中,我想从表字段的值中删除“空格字符”(空格,制表符,回车符......)。
TRANSLATE()
还有什么路要走?例如:
MY_VALUE := TRANSLATE(MY_VALUE,
CHR(9) || CHR(10) || CHR(11) || CHR(12) || CHR(13) || ' ', '');
还是有更好的选择(PHP PCRE中的[:space:]
之类的东西)?
感谢您的任何建议。
答案 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);