Oracle REGEXP_REPLACE开头的数字和空格

zfycwa2u  于 2023-02-03  发布在  Oracle
关注(0)|答案(3)|浏览(163)

我有这样的数据:

000000001 ItemA
000000002 ItemB
000000003 ItemC

我想得到这个结果

ItemA
ItemB
ItemC

我尝试使用以下正则表达式REGEXP_REPLACE:@"^[\d-]*\s*",我在下面的公认答案中找到了它:regex remove digits and - in beginning问题如下:
SELECT REGEXP_REPLACE(test_column, '@"^[\d-]*\s*"', '') FROM test_table;
但它不工作...

lpwwtiir

lpwwtiir1#

该解决方案的代码段是用C#编写的,并利用了.NET Regular Expressions。但是,Oracle数据库需要POSIX Extended Regular Expressions (ERE)才能与其REGEXP_REPLACE函数兼容。要解决此问题,可以使用Oracle POSIX兼容的正则表达式,如下所示:

^[0-9]*[[:space:]]*
  • ^-它匹配要搜索的文本的开头。
  • [0-9]-它匹配任何单个数字字符(0到9)。
  • *-它匹配零次或多次出现的前导字符。
  • [[:space:]]-它匹配任何空白字符,包括空格、制表符和换行符。
  • *-匹配零个或多个空白字符。
cqoc49vn

cqoc49vn2#

您会遇到一些小错误,但可以使用以下两个查询

CREATE TABLE table1
    ("data" varchar2(15))
;
INSERT ALL 
    INTO table1 ("data")
         VALUES ('000000001 ItemA')
    INTO table1 ("data")
         VALUES ('000000002 ItemB')
    INTO table1 ("data")
         VALUES ('000000003 ItemC')
SELECT * FROM dual
3 rows affected
SELECT REGEXP_REPLACE("data", '^[0-9-]*\s', '') FROM table1;

| REGEXP_REPLACE("数据",'^[0 - 9-]*\S ','')|
| - ------|
| 项目A|
| 项目B|
| 项目C|

SELECT REGEXP_REPLACE("data", '^[[:digit:]-]*\s', '') FROM table1;

| REGEXP_REPLACE("数据",'^[[:数字:]-]*\S ','')|
| - ------|
| 项目A|
| 项目B|
| 项目C|
fiddle

xghobddn

xghobddn3#

如果它不一定是正则表达式,尝试(快速!)substr + instr组合。对于小数据集,你不会注意到任何差异,但对于大量数据,这应该表现得更好。
样本数据:

SQL> with test (col) as
  2    (select '000000001 ItemA' from dual union all
  3     select '000000002 ItemB' from dual
  4    )

质询:

5  select substr(col, instr(col, ' ') + 1) result
  6  from test;

RESULT
---------------
ItemA
ItemB

SQL>

相关问题