2017-03-25 24 views
-2

我有一個表格式如下,拆分一列到多列通過檢查條件

ID | Marks | Maths | Science | Grade 
1 | 72_93_A |  |   | A 
2 | 43_B |  |   | B 

現在我需要拆分標誌列字符串分隔符爲_和插入在數學和科學列中的值。另外如果標記列數據有三個標記(72_93_A),那麼我需要更新數學和科學列,否則我只需要更新數學列。我需要輸出如下所述,

ID | Marks | Maths | Science | Grade 
1 | 72_93_A | 72 | 93 | A 
2 | 43_B | 43 |   | B 

有人可以幫助我在這種條件更新方案。

+0

你在哪個數據庫?你需要這4個?另外,你有什麼試圖解決自己的問題,或只是等着我們爲你做? –

+0

我在Oracle數據庫。我試着用SUBSTRING_INDEX得到哪個沒有正確更新。將張貼您 – Vinod

+1

請編輯問題並修復標記和標題。如果你想在Oracle中使用它,不要說「在SQL Server中」。 –

回答

0
select 
    regexp_substr(Marks, '([^_]+)(_[^_]+){2}$', 1, 1, null, 1) as Maths, 
    regexp_substr(Marks, '([^_]+)(_[^_]+){1}$', 1, 1, null, 1) as Science, 
    regexp_substr(Marks, '([^_]+)(_[^_]+){0}$', 1, 1, null, 1) as Grade 
from . . . 
0

您可以使用regexp_substr執行更新:

update your_table 
set Maths = regexp_substr(marks, '\d+', 1, 1), 
    Science = regexp_substr(marks, '\d+', 1, 2) 
where Maths is null 
    or science is null; 

\d+匹配一個或多個數字和第四個參數是發生。