簡體   English   中英

如何根據 Oracle 中其他列中“/”后的值創建新列?

[英]How to create new column based on values after "/" in other column in Oracle?

我在 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 中做到這一點?

正則表達式或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>

您可以使用:

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
例子.com A B C D
例子.com

筆記:

  • 即使該列不包含/字符,這也將起作用。
  • 如果您只使用SUBSTR(col1, INSTR(col1, '/') + 1)並且字符串不包含/那么它將返回所有內容而不是返回NULL
  • 如果您使用REGEXP_SUBSTR(col1, '\w+$')並且字符串不包含或包含多個/字符(或任何其他非單詞字符),則它不會在第一個/之后返回 substring 。

比較輸出:

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 A B C D A B C D A B C D 光盤
例子.com 例子.com com

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM