Mysql (SQL)将最后一个逗号后的文本从一列复制到新列
我没有mySQL,但我正在使用数据库的SQLite数据库浏览器 我目前正在设计一个关于伦敦房产的数据库,其中一个栏目是address。 例如,地址栏有:[Ovanna Mews,白金汉路19A号,N1] 表名:West2 我想将N1移动到一个名为邮政编码的新列 最终产品应如下所示:Mysql (SQL)将最后一个逗号后的文本从一列复制到新列,mysql,sql,database,sqlite,Mysql,Sql,Database,Sqlite,我没有mySQL,但我正在使用数据库的SQLite数据库浏览器 我目前正在设计一个关于伦敦房产的数据库,其中一个栏目是address。 例如,地址栏有:[Ovanna Mews,白金汉路19A号,N1] 表名:West2 我想将N1移动到一个名为邮政编码的新列 最终产品应如下所示: address column: **Ovanna Mews, 19A Buckingham Road** postcode column: **N1** 另一个例子: (old) Lown
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多列,所以手动更改它不会被认为是我只是按照您在MySQL中的要求来做的
create table West2(Address varchar(100), postcode varchar(100));
和插入West2(地址)值('Ovanna Mews,白金汉路19A号,N1')代码>
将执行此查询,结果与预期一致
mysql> select * from West2;
+--------------------------------------+----------+
| Address | postcode |
+--------------------------------------+----------+
| Ovanna Mews, 19A Buckingham Road, N1 | NULL |
+--------------------------------------+----------+
正如您的问题所说,将“,”之后的最后一个字符串移动到fieldpostcode
中,我执行了以下命令
update West2 set postcode=SUBSTRING_INDEX(Address, ',', -1), Address=replace(Address,concat(',',SUBSTRING_INDEX(Address, ',', -1)), '');
执行查询后得到的结果为
mysql> select * from West2;
+----------------------------------+----------+
| Address | postcode |
+----------------------------------+----------+
| Ovanna Mews, 19A Buckingham Road | N1 |
+----------------------------------+----------+
希望这对您有所帮助,对于SQLite DB可能也是如此
注意:第一次执行后,这可能会更改所有行,但如果再次执行此查询,将导致从所有条目中删除,
,因此请只执行一次。编辑:您可以将其编辑到google sheets
,但不知道如何将其导入数据库,因此我将回答这个问题。您要查找的是导入CSV文件
编辑2:只要正确阅读,您还需要知道如何在G.电子表格中拆分值。这解释起来有点复杂,但很容易做到
首先,在谷歌电子表格上
选择整个地址栏(通过单击栏中的字母)。转到选项卡数据>将文本拆分为列…
。因为您的列已经有逗号,所以它会将逗号之间的所有内容拆分为列
| 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
)
然后,您需要以CSV的形式从G.Sheets下载工作表:文件>下载方式>逗号分隔值(CSV当前电子表格)
确保工作表列的顺序与SQL表相同,如果此工作表的第一行是列的名称,则删除该行
我建议为此创建另一个表(因为如果您不先清除它,您将有重复的数据=编辑邮政编码之前的数据和编辑邮政编码之后的数据)。然后,按照“文件>导入>表格自.CSV文件>表格由”\u GSHEETS.CSV生成”
,选择表格
我会留下我以前的回答,以防有人从搜索引擎登陆这里
如果当前地址中的邮政编码
始终位于末尾,且长度始终为2个字符,前面带有逗号和空格,则您可以首先使用选择地址
并用更新地址
中的值,然后删除最后4位数字来更新中的值,结合和
第一部分,表是否具有唯一的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
另外,我建议您在尝试使用真正的表之前,将包含所有数据的表复制到这个新表上,并测试更新。或者在执行之前使用begintransaction
执行ROLLBACK
,以防出现任何错误。我获得了工作SQLite命令以获得所需的任务,只需要执行三个查询
[1] :update West2 set postcode=(从West2中选择替换(地址,rtrim(地址,替换(地址,,,,,,,,,,,),,)))代码>-更新postalcode列
[2] :update West2 set address=(从West2中选择rtrim(地址,替换(地址,,,,,)))代码>-更新地址列
[3] :updatewest2 set address=(从West2中选择replace(地址,substr(地址,-1),“”)代码>-要从所有条目中删除最后一个,
在地址列中
这将完成所有必需的任务
祝你一切顺利:)一句警告的话;你确定最后一部分永远是邮政编码吗?如果是用户输入,他们可能会键入:“Ovanna Mews,19A白金汉路,N1,英国”或更可能的是“Ovanna Mews,19A白金汉路”是“N1”您想要移动的实际值,或者只是要移动的最后一个分隔值?有些条目没有邮政编码,但至少90%的条目末尾有邮政编码。N1是我想要移动的实际post代码。这在SQLite中很难做到,因为没有拆分函数。您可以切换到其他数据库,如MySql和Oracle,它们提供了拆分功能。如果你不能做到这一点,最好的办法是用java/python编写一个代码,修改底层文本文件,并将post代码作为一个新列分离出来。谢谢你的回复。不幸的是,我认为SQLite不支持SUBSTRING_INDEX()函数。。这就是我运行tghe查询时得出的结果:没有这样的函数:SUBSTRING_INDEX:updatetest
set postcode=SUBSTRING_INDEX(address,,,,-1)和address=replace(address,concat(,,,,,,SUBSTRING_INDEX(address,,,,-1)),”;好吧,我要意识到我可以把它导入谷歌表单中去做。我认为谷歌工作表有拆分功能,但我不知道如何应用它…谢谢你的回复。邮政编码总是在末尾,但它并不总是2个字符长,有些