我有这样的数百万条记录,但我在这里分享的记录很少 我需要的只是从这个recodrs拿8个charchers这么多有(。)和一些有(/)所以删除(。)abd(/)请看样本输出 表中的记录
.as-console-wrapper { max-height: 100%!important; top: 0; }
输出应该是这样的
GBR.FCL.AT.245448C.A
GBR.FCL.AT.225405L.A
at286623da
EASA UK/AT/311969F/A
AT/332092H/A
AT238691G/A
答案 0 :(得分:0)
假设你需要获得8个字符,不包括/
和.
,从字符串AT
开始(无论情况如何)并且恰好有一个AT
输入字符串中的1}}(在任何情况下组合),这应该是你需要的:
with input(x) as (
select 'GBR.FCL.AT.245448C.A' from dual union all
select 'GBR.FCL.AT.225405L.A' from dual union all
select 'at286623da' from dual union all
select 'EASA UK/AT/311969F/A' from dual union all
select 'AT/332092H/A' from dual union all
select 'AT238691G/A' from dual
)
select x as yourString,
substr(translate(x, 'x/.', 'x'), instr(translate(upper(x), '/.x', 'x'), 'AT')+2, 8) as result
from input
给出了:
YOURSTRING RESULT
-------------------- --------------------------------
GBR.FCL.AT.245448C.A 245448CA
GBR.FCL.AT.225405L.A 225405LA
at286623da 286623da
EASA UK/AT/311969F/A 11969FA
AT/332092H/A 332092HA
AT238691G/A 238691GA
答案 1 :(得分:0)
假设我们可以依赖于样本完整且具有代表性(在SO中并非总是安全的假设),所需的输出是字符串的最后八个字符,忽略.
和\
。
所以最简单的事情可能就是使用translate()
删除不需要的字符,然后返回最后八个字符:
select substr(translate(str, 'a.\', 'a'), -8) as extracted_str
from your_table
稍微更多工程解决方案将应用正则表达式来细化格式为999999AA的字符串:
select regexp_replace(translate(str, 'a.\', 'a'),
'^(.*)([[:digit:]]{6}[[:alpha:]]{2})(.*)$', '\2'
) as extracted_str
from your_table