我在 Oracle 中有帶有“col1”的表:
col1
------
email1.com/GGR2
pokmail.com/AA
rrajd.com.nl/RRe2
我需要用“/”之后的值創建“col2”。因此,我需要如下內容:
col1 | col2
--------------------------
email1.com/GGR2 |GGR2
pokmail.com/AA |AA
rrajd.com.nl/RRe2 |RRe2
我怎樣才能在 Oracle 中做到這一點?
uj5u.com熱心網友回復:
正則運算式或substr instr:
SQL> with test (col1) as
2 (select 'email1.com/GGR2' from dual union all
3 select 'pokmail.com/AA' from dual union all
4 select 'rrajd.com.nl/RRe2' from dual
5 )
6 select col1,
7 regexp_substr(col1, '\w $') col2_first,
8 --
9 substr(col1, instr(col1, '/') 1) col2_second
10 from test;
COL1 COL2_FIRST COL2_SECOND
----------------- ----------------- -----------------
email1.com/GGR2 GGR2 GGR2
pokmail.com/AA AA AA
rrajd.com.nl/RRe2 RRe2 RRe2
SQL>
uj5u.com熱心網友回復:
您可以使用:
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 機管局 rrajd.com.nl/RRe2 RRe2 例子.com A B C D 例子.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 機管局 機管局 機管局 機管局 rrajd.com.nl/RRe2 RRe2 RRe2 RRe2 RRe2 例子.com/ab/cd A B C D A B C D A B C D 光碟 例子.com 例子.com 電腦
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/376661.html
