select regexp_replace((select regexp_substr(reference_number, '[^|]+', 1, level),
reference_number
from ups_ship1
connect by regexp_substr(reference_number, '[^|]+', 1, level)
is not null), '(\D+)', '')
from ups_ship1;
问问题
422 次
2 回答
2
有点难以理解您要做什么,但是您不能将返回许多行(带有 2 列)作为第一个参数的子查询的结果发送到regexp_replace
.
您可以像这样在 FROM 子句中使用子查询:
select regexp_replace(rn, '(\D+)', '')
from (select regexp_substr(reference_number, '[^|]+', 1, level) rn,
reference_number
from ups_ship1
connect by regexp_substr(reference_number, '[^|]+', 1, level)
is not null) up;
于 2013-05-30T08:51:00.420 回答
1
很难说没有任何数据,但根据您之前的问题和Ben 的回答,您将两列(您计算的提取值和原始管道分隔的字符串)传递到regexp_replace
- 这给出了 ORA-00913 - 并且regexp_substr()
正在返回多行,这也是错误的。
我想你想要这个:
select reference_number, regexp_replace(val, '(\D+)', '')
from (
select regexp_substr(reference_number, '[^|]+', 1, level) val,
reference_number
from ups_ship1
connect by regexp_substr(reference_number, '[^|]+', 1, level) is not null
);
SQL Fiddle 基于您上一个问题的示例数据,尽管它没有任何触发替换的数据。
于 2013-05-30T08:52:09.943 回答