gpt4 book ai didi

SQL - 根据特定列值创建两个新行条目

转载 作者:行者123 更新时间:2023-11-29 14:33:57 25 4
gpt4 key购买 nike

我有一个包含一些地址数据的数据库表。我的问题是有些行有两个门牌号条目,如下所示:

'8, 8A'
'12,14'

我想做的是:

  • 将此行拆分为两个单独的行
  • 新行都有特定的门牌号
  • 删除包含这两个条目的旧行
  • 新行的其他列的值应该与之前相同

门牌号列是一个文本字段,因为可以添加“A”、“B”等。我想知道是否有任何方法可以在 sql 中执行此操作,因此不胜感激。

编辑

这是我的表格的样子: enter image description here

最佳答案

你可以这样做

数据

CREATE TABLE address
(house_number VARCHAR(20),
street VARCHAR(100));

INSERT INTO address VALUES ('8, 8A', 'High Street');
INSERT INTO address VALUES ('12, 14', 'New Street');
INSERT INTO address VALUES ('1', 'First Street');

解决方案

SELECT TRIM(adr_split.house_number) AS house_number, adr.street
FROM address adr, UNNEST(STRING_TO_ARRAY(adr.house_number, ',')) adr_split(house_number);

输出

house_number    street
8 High Street
8A High Street
12 New Street
14 New Street
1 First Street

就用您的旧数据替换此输出而言,您可以这样做

CREATE TABLE new_address
(house_number VARCHAR(20),
street VARCHAR(100));

INSERT INTO new_address
SELECT TRIM(adr_split.house_number) AS house_number, adr.street
FROM address adr, UNNEST(STRING_TO_ARRAY(adr.house_number, ',')) adr_split(house_number);

DROP TABLE address;

ALTER TABLE new_address RENAME TO address;

现在地址表将具有您预期的数据。

输出

SELECT * FROM address;

house_number street
8 High Street
8A High Street
12 New Street
14 New Street
1 First Street

关于SQL - 根据特定列值创建两个新行条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47769864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com