你可以使用:
SELECT col1,
CASE INSTR(col1, '/')
WHEN 0
THEN NULL
ELSE SUBSTR(col1, INSTR(col1, '/') + 1)
END AS col2
FROM table_name;
或者,使用(较慢的)正则表达式:
SELECT col1,
REGEXP_SUBSTR(col1, '/(.*)', 1, 1, NULL, 1) AS re_col2
FROM table_name;
其中,对于样本数据:
CREATE TABLE table_name (col1) AS
SELECT 'email1.com/GGR2' FROM DUAL UNION ALL
SELECT 'pokmail.com/AA' FROM DUAL UNION ALL
SELECT 'rrajd.com.nl/RRe2' FROM DUAL UNION ALL
SELECT 'example.com/ab/cd' FROM DUAL UNION ALL
SELECT 'example.com' FROM DUAL;
输出:
| COL1 |
COL2 |
| email1.com/GGR2 |
GGR2 |
| pokmail.com/AA |
AA |
| rrajd.com.nl/RRe2 |
RRe2 |
| example.com |
ab/cd |
| example.com |
|
注意事项:
- 即使该列不包含
/ 字符,这也将起作用。
- 如果您只使用
SUBSTR(col1, INSTR(col1, '/') + 1) 并且字符串不包含/,那么它将返回所有内容而不是返回NULL。
- 如果您使用
REGEXP_SUBSTR(col1, '\w+$') 并且字符串不包含或包含多个/ 字符(或任何其他非单词字符),则它不会返回第一个/ 之后的子字符串。
比较输出:
SELECT col1,
CASE INSTR(col1, '/')
WHEN 0
THEN NULL
ELSE SUBSTR(col1, INSTR(col1, '/') + 1)
END AS col2a,
REGEXP_SUBSTR(col1, '/(.*)', 1, 1, NULL, 1) AS col2b,
SUBSTR(col1, INSTR(col1, '/') + 1) AS col2c,
REGEXP_SUBSTR(col1, '\w+$') AS col2d
FROM table_name;
输出:
| COL1 |
COL2A |
COL2B |
COL2C |
COL2D |
| email1.com/GGR2 |
GGR2 |
GGR2 |
GGR2 |
GGR2 |
| pokmail.com/AA |
AA |
AA |
AA |
AA |
| rrajd.com.nl/RRe2 |
RRe2 |
RRe2 |
RRe2 |
RRe2 |
| example.com/ab/cd |
ab/cd |
ab/cd |
ab/cd |
cd |
| example.com |
|
|
example.com |
com |
db小提琴here