我没有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列,因此不会考虑手动更改
答案 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 browser,File > Import > Table from .CSV file > SHEET_GENERATED_BY_GSHEETS.csv
,选择您的表格。
如果有人从搜索引擎登陆,我会留下我以前的答案。
如果当前postcode
中的address
始终位于最后且始终为2个字符且前面有逗号和空格,则可以先更新postcode
使用select address
结合substr以及之后的updating address
删除最后4位数字ltrim和substr。
第一部分,该表是否具有唯一的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);
- 从所有条目中删除最后一个,
在地址栏
这将完成所有必需的任务。
一切顺利:)