Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 从列表中查找特定编号_String_Oracle - Fatal编程技术网

String 从列表中查找特定编号

String 从列表中查找特定编号,string,oracle,String,Oracle,我有数百万张这样的唱片,但我在这里分享的唱片很少 我需要的是从这个记录中取出8个字符,所以很多有(.)和一些有(/),所以删除(.)abd(/)请查看示例输出 表中的记录 GBR.FCL.AT.245448C.A GBR.FCL.AT.225405L.A at286623da EASA UK/AT/311969F/A AT/332092H/A AT238691G/A 输出应该是这样的 245448CA 225405LA 286623da 311969FA 332092HA 假设您需要获得8个

我有数百万张这样的唱片,但我在这里分享的唱片很少 我需要的是从这个记录中取出8个字符,所以很多有(.)和一些有(/),所以删除(.)abd(/)请查看示例输出 表中的记录

GBR.FCL.AT.245448C.A
GBR.FCL.AT.225405L.A
at286623da
EASA UK/AT/311969F/A
AT/332092H/A
AT238691G/A
输出应该是这样的

245448CA
225405LA
286623da
311969FA
332092HA

假设您需要获得8个字符,不包括
/
,从字符串
处开始(无论是哪种情况),并且输入字符串中正好出现一个
处的
(在任何情况下的组合),这应该是您需要的:

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

假设我们可以将样本视为完整且具有代表性的样本(在SO中并不总是安全的假设),则所需的输出是字符串的最后八个字符,忽略
\

因此,最简单的方法是使用
translate()
去除不需要的字符,然后返回最后八个字符:

select substr(translate(str, 'a.\', 'a'), -8) as extracted_str
from your_table
一个稍微工程化的解决方案将应用正则表达式来细化格式为999999 AA的字符串:

select regexp_replace(translate(str, 'a.\', 'a'),
                   '^(.*)([[:digit:]]{6}[[:alpha:]]{2})(.*)$', '\2'
      ) as extracted_str
from your_table

如何识别所需的字符串部分?它总是以AT开头吗?您确定每个字符串至少发生一次吗?或者它是字符串中唯一一个包含数字的部分吗?不,我不明白。您如何理解需要获取字符串的哪一部分?对于exmaply(GBR.FCL.AT.245448C.A),我需要这一部分(245448CA),问题仍然相同。如何识别所需的字符串部分?它总是以AT开头吗?您确定每个字符串至少发生一次吗?或者它是字符串中唯一包含数字的部分?如果您有一个字符串“AT.AT.AT567AT456”,该怎么办?或者如果字符串中没有AT?或者如果你在XXXXXXXX。。。