我在 Oracle SQL Developer 中有如下表:
col1
-------
Regio Apo
Makreg One15
Regio Kawalisz
Makreg Podl
Makrego BB
AAA
根據“col1”中的值,我需要創建新列“col2”。它應該是二進制列:
- 當“col1”中的值以“M”開頭時,在“col2”中回傳 1
- 當“col1”中的值以“R”開頭時,在“col2”中回傳 0
- 而“col1”中的所有值都以 M 或 R 開頭,但以防萬一它以另一個字母開頭給出 NULL
因此,我需要如下內容:
col1 col2
-----------------------
Regio Apo | 0
Makreg One15 | 1
Regio Kawalisz | 0
Makreg Podl | 1
Makrego BB | 1
AAA | NULL
我怎樣才能在 Oracle SQL Developer 中做到這一點?
uj5u.com熱心網友回復:
CASE 似乎是最明顯的:
SQL> with test (col1) as
2 (select 'Regio Apo' from dual union all
3 select 'Makreg One15' from dual union all
4 select 'Regio Kawalisz' from dual union all
5 select 'Makreg Podl' from dual union all
6 select 'Makrego BB' from dual union all
7 select 'AAA' from dual
8 )
9 select col1,
10 case when substr(col1, 1, 1) = 'M' then 1
11 when substr(col1, 1, 1) = 'R' then 0
12 else null
13 end cols
14 from test;
COL1 COLS
-------------- ----------
Regio Apo 0
Makreg One15 1
Regio Kawalisz 0
Makreg Podl 1
Makrego BB 1
AAA
6 rows selected.
SQL>
uj5u.com熱心網友回復:
我需要創建新列“col2”。
向表中添加一個虛擬列:
ALTER TABLE table_name
ADD (
col2 NUMBER(1,0)
GENERATED ALWAYS AS (
CASE SUBSTR(col1, 1, 1)
WHEN 'M' THEN 1
WHEN 'R' THEN 0
ELSE NULL
END
)
);
其中,對于樣本資料:
CREATE TABLE table_name (col1) AS
SELECT 'Regio Apo' FROM DUAL UNION ALL
SELECT 'Makreg One15' FROM DUAL UNION ALL
SELECT 'Regio Kawalisz' FROM DUAL UNION ALL
SELECT 'Makreg Podl' FROM DUAL UNION ALL
SELECT 'Makrego BB' FROM DUAL UNION ALL
SELECT 'AAA' FROM DUAL;
添加列后,然后:
SELECT * FROM table_name;
輸出:
COL1 COL2 區域阿波 0 Makreg One15 1 卡瓦利斯區 0 馬克雷格·波德爾 1 馬克雷戈BB 1 AAA
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/376666.html
