提取第n个子字符串

时间:2018-06-26 14:40:31

标签: sql sql-server oracle substr

我需要从字符串中提取子字符串。下面提供了可用的ID。

0234-RDRT- RS111 -M-EU

0234-RDRT- RSD123 -M-EU

我需要将突出显示的内容提取到一列中。如何将所有字符提取到Microsoft SQL Server的同一列中。

3 个答案:

答案 0 :(得分:4)

REGEX_SUBSTR的第四个参数称为occurence。您只需要为每列设置要查看的事件:

CREATE TABLE T (id varchar2(30));
INSERT INTO T VALUES ('0234-RDRT-RS111-M-EU');
INSERT INTO T VALUES ('0234-RDRT-RSD123-M-EU');

SELECT regexp_substr(id,'[^-]+',1,1) as col1,
       regexp_substr(id,'[^-]+',1,2) as col2,
       regexp_substr(id,'[^-]+',1,3) as col3,
       regexp_substr(id,'[^-]+',1,4) as col4,
       regexp_substr(id,'[^-]+',1,5) as col5
  FROM t;

COL1    COL2    COL3    COL4    COL5
0234    RDRT    RS111   M   EU
0234    RDRT    RSD123  M   EU

有关更多详细信息,请参见Oracle文档中的REGEX_SUBSTR

答案 1 :(得分:0)

您可以通过在破折号上将它们拆分来提取列id的所有值

select regexp_substr(id,'[^-]+', 1, level) 
from (select '0234-RDRT-RSD123-M-EU' as id 
        from dual)
connect by regexp_substr(id, '[^-]+', 1, level) is not null

结果有5行。 然后,您可以根据需要利用结果

答案 2 :(得分:-1)

基于'-'分割,存储在字符串数组中,然后使用第3个元素。