我有一張桌子
Create table emp_details(eno number,ename varchar2(22));
具有以下值
| 伊諾 | 姓名 |
|---|---|
| 1 | 蘇雷什庫馬爾 |
| 2 | 拉姆庫馬爾 |
現在我想通過使用空格將 ename 拆分為兩列。
| 伊諾 | 姓名 | col1 | col2 |
|---|---|---|---|
| 1 | 蘇雷什庫馬爾 | 肯定的 | 庫馬爾 |
| 2 | 拉姆庫馬爾 | 記憶體 | 庫馬爾 |
uj5u.com熱心網友回復:
如果資料集不是比較大,可以使用正則運算式
WITH emp_details(eno,ename) AS
(
SELECT 1, 'suresh kumar' FROM dual UNION ALL
SELECT 2, 'ram kumar' FROM dual
)
SELECT eno,
REGEXP_SUBSTR(ename,'[^ ] ') AS name,
REGEXP_SUBSTR(ename,'[^ ] $') AS surname
FROM emp_details
| 伊諾 | 名稱 | 姓 |
|---|---|---|
| 1 | 肯定的 | 庫馬爾 |
| 2 | 記憶體 | 庫馬爾 |
但是如果資料集中可以有多個名字的人,那么寧愿使用
WITH emp_details(eno,ename) AS
(
SELECT 1, 'suresh kumar' FROM dual UNION ALL
SELECT 2, 'ram kumar' FROM dual UNION ALL
SELECT 3, 'ram sahil kumar' FROM dual
)
SELECT eno,
REGEXP_REPLACE(ename, '^(.*) .*$', '\1') AS name,
REGEXP_SUBSTR(ename,'[^ ] $') AS surname
FROM emp_details
| 伊諾 | 名稱 | 姓 |
|---|---|---|
| 1 | 肯定的 | 庫馬爾 |
| 2 | 記憶體 | 庫馬爾 |
| 3 | 拉姆薩希爾 | 庫馬爾 |
Demo
uj5u.com熱心網友回復:
我們可以INSTR在這里使用一個使用基本字串選項的選項:
SELECT
eno,
CASE WHEN INSTR(ename, ' ') > 0
THEN SUBSTR(ename, 1, INSTR(ename, ' ') - 1)
ELSE ename END AS col1,
CASE WHEN INSTR(ename, ' ') > 0
THEN SUBSTR(ename, INSTR(ename, ' ') 1) END AS col2
FROM yourTable;
演示
上面使用的CASE運算式是為了確保一個單詞的名字只分配給第一個名字。
uj5u.com熱心網友回復:
如果名稱有兩個“單詞”,那么您可以考慮使用正則運算式。
SQL> select eno, regexp_substr(ename, '\w ', 1, 1) first_name,
2 regexp_substr(ename, '\w ', 1, 2) last_name
3 from emp_details;
ENO FIRST_NAME LAST_NAME
---------- ---------- ----------
1 suresh kumar
2 ram kumar
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/425318.html
