我有一张格式如下的表格,
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
有人可以帮我解决这个条件更新方案。
答案 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个参数是匹配项。