Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql (SQL)将最后一个逗号后的文本从一列复制到新列_Mysql_Sql_Database_Sqlite - Fatal编程技术网

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

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

我没有mySQL,但我正在使用数据库的SQLite数据库浏览器

我目前正在设计一个关于伦敦房产的数据库,其中一个栏目是address。 例如,地址栏有:[Ovanna Mews,白金汉路19A号,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多列,所以手动更改它不会被认为是

我只是按照您在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     |
+--------------------------------------+----------+
正如您的问题所说,将“,”之后的最后一个字符串移动到field
postcode
中,我执行了以下命令

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:update
test
set postcode=SUBSTRING_INDEX(address,,,,-1)和address=replace(address,concat(,,,,,,SUBSTRING_INDEX(address,,,,-1)),”;好吧,我要意识到我可以把它导入谷歌表单中去做。我认为谷歌工作表有拆分功能,但我不知道如何应用它…谢谢你的回复。邮政编码总是在末尾,但它并不总是2个字符长,有些