我有这样的数据:
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;
但它不工作...
3条答案
按热度按时间lpwwtiir1#
该解决方案的代码段是用C#编写的,并利用了.NET Regular Expressions。但是,Oracle数据库需要POSIX Extended Regular Expressions (ERE)才能与其REGEXP_REPLACE函数兼容。要解决此问题,可以使用Oracle POSIX兼容的正则表达式,如下所示:
^
-它匹配要搜索的文本的开头。[0-9]
-它匹配任何单个数字字符(0到9)。*
-它匹配零次或多次出现的前导字符。[[:space:]]
-它匹配任何空白字符,包括空格、制表符和换行符。*
-匹配零个或多个空白字符。cqoc49vn2#
您会遇到一些小错误,但可以使用以下两个查询
| REGEXP_REPLACE("数据",'^[0 - 9-]*\S ','')|
| - ------|
| 项目A|
| 项目B|
| 项目C|
| REGEXP_REPLACE("数据",'^[[:数字:]-]*\S ','')|
| - ------|
| 项目A|
| 项目B|
| 项目C|
fiddle
xghobddn3#
如果它不一定是正则表达式,尝试(快速!)
substr + instr
组合。对于小数据集,你不会注意到任何差异,但对于大量数据,这应该表现得更好。样本数据:
质询: