【发布时间】:2020-02-04 14:28:31
【问题描述】:
我有一个包含 250k 数据的表,在这些数据中,我有 1000 行,每列都有相同的数据,一个不同的参考列。
如果满足某些条件,我想做的是拆分参考列,如果不满足这些条件,参考值可以保持原样。
以下是我的创建表和插入语句:
CREATE TABLE "BU_TABLE"
(
"NAME" VARCHAR2(255 BYTE),
"TEL_NO" VARCHAR2(255 BYTE),
"POST_CODE" VARCHAR2(8 BYTE),
"REF_NO" VARCHAR2(255 BYTE)
;
我将Tel_No 和Ref_No 列设置为Varchar2 的原因是因为当数字有空格时有空格,然后a)插入时会提示Invalid Number error b)Tel_No 在示例数据的那一刻没有这个问题,但随着更多数据的添加,我可能会遇到这个问题。
插入语句:
Insert into BU_TABLE (NAME,TEL_NO,POST_CODE,REF_NO) values ('Damian','7900123456','ME1 2BC','12345678 1234567891234');
Insert into BU_TABLE (NAME,TEL_NO,POST_CODE,REF_NO) values ('Graeme','7900789012','ME1 2DE','12 345 5678901234567');
Insert into BU_TABLE (NAME,TEL_NO,POST_CODE,REF_NO) values ('Sarah','7900456789','ME1 2FG','90123456 890123456789');
现在我希望BU_TABLE 保持原样,使用原始数据。我想在这个表的后面创建另一个表来拆分Ref_No,所以我有一个由 8 个数字组成的序列,一个空格,然后是 13 个数字。无论这种模式出现在哪里,我都想复制该行并给我以下内容:
Name | Tel_No | Post_Code | Ref_No
Damian | 7900123456 | ME1 2BC | 12345678
Damian | 7900123456 | ME1 2BC | 1234567891234
所需代码未找到序列的行,数据行将在表中保持不变,因此我的最终表将如下所示。这显示了新的数据拆分,其中 Damian 的 2 个参考编号已被拆分,现在显示为 2 行,而 Graeme 和 Sarah 有他们的原始参考编号,因为他们的序列不符合标准。
决赛桌:
Name | Tel_No | Post_Code | Ref_No
Graeme | 7900789012 | ME1 2DE | 12 345 5678901234567
Sarah | 7900456789 | ME1 2FG | 90123456 890123456789
Damian | 7900123456 | ME1 2BC | 12345678
Damian | 7900123456 | ME1 2BC | 1234567891234
希望我的要求很明确。
很抱歉,因为有另一个帖子有同样的问题: How do I copy a row and split one of the columns based on certain criteria in Oracle SQL?
但是问题已经结束,因为我被要求添加我的创建和插入语句以使我的要求更清晰,因此我创建了一个新问题。
【问题讨论】:
-
您使用的是 MySQL 还是 Oracle?
-
@jarlh - 我编辑了标签。使用 MySQL 的人不会将“Oracle SQL”放在他们的帖子标题中。