[英]How to split string words with regexp_substr in Oracle SQL?
select
regexp_substr('a-b--->d--->e f','[^--->]+',1,1) col1
,regexp_substr('a-b--->d--->e f','[^--->]+',1,2) col2
,regexp_substr('a-b--->d--->e f','[^--->]+',1,3) col3
,regexp_substr('a-b--->d--->e f','[^--->]+',1,4) col4
from dual
output
col1 | 列2 | 列3 | 列4 |
---|---|---|---|
一種 | b | d | 有效 |
必填 output
col1 | 列2 | 列3 | 列4 |
---|---|---|---|
ab | d | 有效 |
您可以使用:
select regexp_substr(value,'(.*?)(-+>|$)',1,1, NULL, 1) AS col1
, regexp_substr(value,'(.*?)(-+>|$)',1,2, NULL, 1) AS col2
, regexp_substr(value,'(.*?)(-+>|$)',1,3, NULL, 1) AS col3
, regexp_substr(value,'(.*?)(-+>|$)',1,4, NULL, 1) AS col4
from table_name
或者,如果您正在尋找固定的定界符字符串--->
那么您可以使用簡單的字符串函數(需要輸入更多但可能會更快):
SELECT CASE
WHEN pos1 = 0 THEN value
ELSE SUBSTR(value, 1, pos1 - 1)
END AS col1,
CASE
WHEN pos1 = 0 THEN NULL
WHEN pos2 = 0 THEN SUBSTR(value, pos1 + 4)
ELSE SUBSTR(value, pos1 + 4, pos2 - pos1 - 4)
END AS col2,
CASE
WHEN pos2 = 0 THEN NULL
WHEN pos3 = 0 THEN SUBSTR(value, pos2 + 4)
ELSE SUBSTR(value, pos3 + 4, pos3 - pos2 - 4)
END AS col3,
CASE
WHEN pos3 = 0 THEN NULL
ELSE SUBSTR(value, pos3 + 4)
END AS col4
FROM (
SELECT value,
INSTR(value, '--->', 1, 1) AS pos1,
INSTR(value, '--->', 1, 2) AS pos2,
INSTR(value, '--->', 1, 3) AS pos3
FROM table_name
)
其中,對於示例數據:
CREATE TABLE table_name (value) AS
SELECT 'a-b--->d--->e f' FROM DUAL;
兩者都是 output:
列1 | 列2 | 列3 | 列4 |
---|---|---|---|
ab | d | 有效 | null |
select
regexp_substr('a-b--->d--->e f','[a-z]+([ \-][a-z]+){0,1}',1,1) col1
,regexp_substr('a-b--->d--->e f','[a-z]+([ \-][a-z]+){0,1}',1,2) col2
,regexp_substr('a-b--->d--->e f','[a-z]+([ \-][a-z]+){0,1}',1,3) col3
,regexp_substr('a-b--->d--->e f','[a-z]+([ \-][a-z]+){0,1}',1,4) col4
from dual
;
a-b d e f (null)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.