正则表达式 REGEXP_SUBSTR 拆分为列
regex REGEXP_SUBSTR split into the columns
你能帮我写一个正则表达式来将字符串拆分成列吗?
输入:
select REGEXP_SUBSTR ('/D 1/D 18/15/1000', xxxx) from dual ;
或
select REGEXP_SUBSTR ('/D 1/D 18/15', xxxx) from dual ;
输出:
col1>D 1< col2 >D 18< col3 >15< col4>1000<
或
col1>D 1< col2>D 18< col3>15<
结果应带列。所以这意味着我想分成几列。
REGEXP_SUBSTR
returns 字符串 subject
中与正则表达式 pattern
匹配的部分。您可以使用 REGEXP_REPLACE
,这将允许您使用正则表达式模式匹配将字符串中的一系列字符替换为另一组字符。
select REGEXP_REPLACE ('/D 1/D 18/15/1000', '\/(\w+)', '') from dual ;
要获得您期望的输出,您不需要使用正则表达式。您可以使用简单的 REPLACE
将 /
替换为 space,然后 trim 字符串末尾的任何 space。
SQL> SELECT TRIM (REPLACE ('/D 1/D 18/15/1000', '/', ' ')) AS sample_data FROM DUAL;
SAMPLE_DATA
___________________
D 1 D 18 15 1000
SQL> SELECT TRIM (REPLACE ('/D 1/D 18/15', '/', ' ')) AS sample_data FROM DUAL;
SAMPLE_DATA
______________
D 1 D 18 15
更新
根据评论中的信息,这些值应分为单独的列。下面的正则表达式可用于通过使用 /
作为分隔符进行拆分来获取不同的值。
SQL> WITH sample_data AS (SELECT '/D 1/D 18/15/1000' AS sample_col FROM DUAL)
2 SELECT regexp_substr(sample_col, '[^/]+',1,1) as col1,
3 regexp_substr(sample_col, '[^/]+',1,2) as col2,
4 regexp_substr(sample_col, '[^/]+',1,3) as col3,
5 regexp_substr(sample_col, '[^/]+',1,4) as col4,
6 regexp_substr(sample_col, '[^/]+',1,5) as col5
7 FROM sample_data;
COL1 COL2 COL3 COL4 COL5
_______ _______ _______ _______ _______
D 1 D 18 15 1000
SQL> WITH sample_data AS (SELECT '/D 1/D 18/15' AS sample_col FROM DUAL)
2 SELECT regexp_substr(sample_col, '[^/]+',1,1) as col1,
3 regexp_substr(sample_col, '[^/]+',1,2) as col2,
4 regexp_substr(sample_col, '[^/]+',1,3) as col3,
5 regexp_substr(sample_col, '[^/]+',1,4) as col4,
6 regexp_substr(sample_col, '[^/]+',1,5) as col5
7 FROM sample_data;
COL1 COL2 COL3 COL4 COL5
_______ _______ _______ _______ _______
D 1 D 18 15
你能帮我写一个正则表达式来将字符串拆分成列吗?
输入:
select REGEXP_SUBSTR ('/D 1/D 18/15/1000', xxxx) from dual ;
或
select REGEXP_SUBSTR ('/D 1/D 18/15', xxxx) from dual ;
输出:
col1>D 1< col2 >D 18< col3 >15< col4>1000<
或
col1>D 1< col2>D 18< col3>15<
结果应带列。所以这意味着我想分成几列。
REGEXP_SUBSTR
returns 字符串 subject
中与正则表达式 pattern
匹配的部分。您可以使用 REGEXP_REPLACE
,这将允许您使用正则表达式模式匹配将字符串中的一系列字符替换为另一组字符。
select REGEXP_REPLACE ('/D 1/D 18/15/1000', '\/(\w+)', '') from dual ;
要获得您期望的输出,您不需要使用正则表达式。您可以使用简单的 REPLACE
将 /
替换为 space,然后 trim 字符串末尾的任何 space。
SQL> SELECT TRIM (REPLACE ('/D 1/D 18/15/1000', '/', ' ')) AS sample_data FROM DUAL;
SAMPLE_DATA
___________________
D 1 D 18 15 1000
SQL> SELECT TRIM (REPLACE ('/D 1/D 18/15', '/', ' ')) AS sample_data FROM DUAL;
SAMPLE_DATA
______________
D 1 D 18 15
更新
根据评论中的信息,这些值应分为单独的列。下面的正则表达式可用于通过使用 /
作为分隔符进行拆分来获取不同的值。
SQL> WITH sample_data AS (SELECT '/D 1/D 18/15/1000' AS sample_col FROM DUAL)
2 SELECT regexp_substr(sample_col, '[^/]+',1,1) as col1,
3 regexp_substr(sample_col, '[^/]+',1,2) as col2,
4 regexp_substr(sample_col, '[^/]+',1,3) as col3,
5 regexp_substr(sample_col, '[^/]+',1,4) as col4,
6 regexp_substr(sample_col, '[^/]+',1,5) as col5
7 FROM sample_data;
COL1 COL2 COL3 COL4 COL5
_______ _______ _______ _______ _______
D 1 D 18 15 1000
SQL> WITH sample_data AS (SELECT '/D 1/D 18/15' AS sample_col FROM DUAL)
2 SELECT regexp_substr(sample_col, '[^/]+',1,1) as col1,
3 regexp_substr(sample_col, '[^/]+',1,2) as col2,
4 regexp_substr(sample_col, '[^/]+',1,3) as col3,
5 regexp_substr(sample_col, '[^/]+',1,4) as col4,
6 regexp_substr(sample_col, '[^/]+',1,5) as col5
7 FROM sample_data;
COL1 COL2 COL3 COL4 COL5
_______ _______ _______ _______ _______
D 1 D 18 15