我有一个需要从列值中提取特定部分的要求。
评论:项目BAN27:内容BAN27S001:偏差
现在在上面的文本中,我只需要在新列中添加BAN27S001部分。我唯一的共同因素是String的一部分(例如BAN27)在其他列中可用。现在,我尝试使用具有BAN27作为值的列来提取BAN27S001。我们可以使用正则表达式在Oracle中实现它吗。请提出是否还有其他方法可以实现这一点。
能帮我提取字符串吗?
谢谢 San
答案 0 :(得分:2)
您可以使用[:alnum:]
来检测字母数字部分,如以下示例所示:
with t(colA,colB) as
(
select 'BAN27', 'Review: Project BAN27: Content BAN27S001: Deviation' from dual union all
select 'BAN28', 'Review: Project BAN28: Content BAN28S002: Bio' from dual
)
select colA,
regexp_substr(colB,colA||'([[:alnum:]]+\.?)') as "Substring"
from t;
COLA Substring
----- ---------
BAN27 BAN27S001
BAN28 BAN28S002
编辑:关于最后一条评论,如果要考虑最后三行,则可以使用以下摘录:
with t(colA,colB) as
(
select '177', '177-130/ data continue to be collected' from dual union all
select '177', '177-131 /log accordingly' from dual union all
select '524', '524 - 23 & get these resolved' from dual
)
select colA, nvl( regexp_substr(colB,colA||'(\-[[:digit:]]+)'),
regexp_substr(colB,colA||'([[:space:]]\-[[:space:]][[:digit:]]+)')) "Substring"
from t;
COLA Substring
----- ---------
177 177-130
177 177-131
524 524 - 23
答案 1 :(得分:1)
此查询将识别colb数据,例如ColA +'S'
SELECT
REGEXP_SUBSTR (colb, '[^ ]+', 1,
(case
when REGEXP_SUBSTR(colb, '[^ ]+', 1, 1) like '%'|| cola||'S%' then 1
when REGEXP_SUBSTR(colb, '[^ ]+', 1, 2) like '%'|| cola||'S%' then 2
when REGEXP_SUBSTR(colb, '[^ ]+', 1, 3) like '%'|| cola||'S%' then 3
when REGEXP_SUBSTR(colb, '[^ ]+', 1, 4) like '%'|| cola||'S%' then 4
when REGEXP_SUBSTR(colb, '[^ ]+', 1, 5) like '%'|| cola||'S%' then 5
when REGEXP_SUBSTR(colb, '[^ ]+', 1, 6) like '%'|| cola||'S%' then 6
end) )
FROM tname ;