(SQL)将最后一个逗号之后的文本从一列复制到新列

时间:2017-07-20 15:38:36

标签: mysql sql database sqlite

我没有mySQL,但我正在使用 DB Browser for SQLite 作为数据库。

我目前正在伦敦设计一个属性数据库,其中一个是地址。 例如,地址列包含: [Ovanna Mews,19A Buckingham Road, N1 ]

表名:West2

我想将 N1 移至名为邮政编码的新列。

最终产品应如下所示:

       address column: **Ovanna Mews, 19A Buckingham Road**
      postcode column: **N1**

另一个例子:

(old) Lowndes Square, Knightsbridge, London, SW1X
(new) address column: Lowndes Square, Knightsbridge, London      
     postcode column: SW1X

PS:我的数据库里面有超过100列,因此不会考虑手动更改

3 个答案:

答案 0 :(得分:0)

我只是按照您在MySQL中的要求

    Dalmatian (): Attributes{"dog"} { //using it as argument
        cout << "do i even arrive here" << endl;
    }

create table West2(Address varchar(100), postcode varchar(100));

执行此查询并按预期结果

insert into West2(address) values ('Ovanna Mews, 19A Buckingham Road, N1');

并且正如你的问题所说关于将','之后的最后一个字符串移到字段 mysql> select * from West2; +--------------------------------------+----------+ | Address | postcode | +--------------------------------------+----------+ | Ovanna Mews, 19A Buckingham Road, N1 | NULL | +--------------------------------------+----------+ 我执行了以下命令

postcode

执行查询后得到的结果是

update West2 set postcode=SUBSTRING_INDEX(Address, ',', -1), Address=replace(Address,concat(',',SUBSTRING_INDEX(Address, ',', -1)), '');

希望这会有所帮助,并且可能与SQLite DB相同

注意:这可以在首次执行后更改所有行,但如果再次执行此查询,这将导致从所有条目中删除mysql> select * from West2; +----------------------------------+----------+ | Address | postcode | +----------------------------------+----------+ | Ovanna Mews, 19A Buckingham Road | N1 | +----------------------------------+----------+ ,因此请仅执行一次。

答案 1 :(得分:0)

编辑:As you stated here您可以将其编辑到google sheets但不知道如何import到日期库,所以我会回答这个问题。你要找的是importing CSV file

EDIT2:正确地读到你还需要知道如何split the values at G. Spreadsheets。这有点难以解释,但很容易做到......

首先在Google spreadsheet上选择整个地址的列(通过单击列的字母)。转到标签Data > split text to columns...。由于您的列已经有逗号,因此它会将逗号分隔为列。

| E            | F           | G            |  H    |
|:-------------|------------:|:------------:|:-----:|
|Lowndes Square|Knightsbridge|     London   |  SW1X |

现在您需要加入所需的列并添加逗号,您可以将&", "&这样的列添加到另一列:

=E2&", "&F2&", "&G2

注意可能有超过4列,所以很遗憾,您需要手动调整要加入的列。

最后,对于此部分,您需要将此新列仅作为值复制,只需ctrl + c并将其粘贴到另一列CTRL + SHIFT + V(或Edit tab > Paste Special > Paste values only

然后,您需要将表单从G.Sheets下载为CSV:File > Download as > Comma-separated Values (CSV current spreadsheet)确保工作表列的顺序与SQL表相同,如果此工作表的第一行是列的名称,请删除该行

我建议为此创建另一个表(因为如果你不首先清除它,你将有重复数据=编辑邮政编码之前的数据和之后的数据)。然后,按照this post to import through SQLLite for browserFile > Import > Table from .CSV file > SHEET_GENERATED_BY_GSHEETS.csv,选择您的表格。

如果有人从搜索引擎登陆,我会留下我以前的答案。

如果当前postcode中的address 始终位于最后且始终为2个字符且前面有逗号和空格,则可以先更新postcode使用select address结合substr以及之后的updating address删除最后4位数字ltrimsubstr

第一部分,该表是否具有唯一的ID /主键?

UPDATE a SET a.postcode = (select substr(b.address,-2,2) from table_name b where a.primarykey = b.primarykey)
FROM table_name a

第二部分:

UPDATE a SET a.address = (select ltrim(b.address,substr(b.address,-4,4)) from table_name b where a.primarykey = b.primarykey)
FROM table_name a

另外,我建议你在使用所有数据并将updates测试复制到这个新表之前将其复制到该表中。要么在执行BEGIN TRANSACTION之前使用ROLLBACK执行,以防万一出错。

答案 2 :(得分:0)

我得到了正常的SQLite命令来完成所需的任务,只需要执行三个查询

[1]:update West2 set postcode=(select replace(address, rtrim(address, replace(address, ',', '')), '') from West2); - 更新邮政编码列

[2]:update West2 set address=(select rtrim(address, replace(address, ',', '')) from West2); - 更新地址栏

[3]:update West2 set address=(select replace(address, substr(address, -1), '') from West2); - 从所有条目中删除最后一个, 在地址栏

这将完成所有必需的任务。

一切顺利:)