通过检查条件将一列拆分为多列

时间:2017-03-25 04:22:43

标签: sql oracle oracle-sqldeveloper

我有一张格式如下的表格,

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

现在我需要将带有分隔符的Marks列字符串拆分为_并在Maths和Science列中插入值。此外,如果标记列数据有三个标记(72_93_A),那么我需要更新数学和科学列,否则我只需要更新数学列。我需要输出如下所述,

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

有人可以帮我解决这个条件更新方案。

2 个答案:

答案 0 :(得分: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 . . .

答案 1 :(得分: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+匹配一个或多个数字,第4个参数是匹配项。