将一列分成两列的更新?

Posted

技术标签:

【中文标题】将一列分成两列的更新?【英文标题】:Update that splits one column into two? 【发布时间】:2016-08-17 17:16:12 【问题描述】:

我有点时间紧迫。我有一个有 2 列的表。名字和姓氏。

导入 SQL 的数据在 firstName 列中同时包含名字和姓氏。

有没有一种快速的方法来更新表格,将第一个空格之前的所有内容放入 lastName,并将空格之后的所有内容放入 firstName 列?我知道我可以导出,并通过 excel 执行此操作,但它接近生产时间,所以我宁愿不冒险。

我在这里查看了几个不同的拆分帖子,但这些帖子不涉及同时更新。

【问题讨论】:

你确定你可以简单地使用第一个空格作为分割的锚并且它是准确的吗?像玛丽安史密斯这样的名字呢? 您可以使用更新集分配右侧的mysql字符串函数。集合分配是从左到右处理的,因此请确保在将“结束”从名字中删除之前将其分配给姓氏。 请注意,无论您如何拆分名称,您都会得到不准确的信息。 “约翰史密斯”很容易在空间上分割,但“玛丽安萨默斯”或“爱德华范海伦”呢?第一个应该在第二个空格上拆分,第二个应该在第一个空格上拆分。或者“玛丽安范海伦”呢?我并不是说不要继续,但请注意拆分名称是一门不精确的科学。 名字和姓氏之间总是有一个空格吗? 【参考方案1】:

尝试使用:

UPDATE
   table
SET
   lastname = SUBSTRING(firstName, 1, CHARINDEX(' ', firstName) - 1),
   firstName= SUBSTRING(firstName, CHARINDEX(' ', firstName) + 1, LEN(firstName))

【讨论】:

看起来它可以解决问题,但我的 MySQL 说 CharINDEX 不是一个函数。这是 MySQL 还是 MSSQL? 即MSSQL,你需要使用MySQL的INSTR并进行相应的调整(即交换参数)。 Nicarus,'_' 而不是' ' 的原因是什么?此外,您似乎将名字放在姓氏字段中,并试图将姓氏放在名字字段中(LEN() 调用是不必要的,而且有点“不确定”)。【参考方案2】:

MySQL

演示:

SET @str := 'Robert Optional Dickey';

SELECT 
SUBSTRING_INDEX(@str,SUBSTRING_INDEX(@str,' ',-1),1) AS lastName,
SUBSTRING_INDEX(@str,' ',-1) AS firstName;

输出:

lastName            firstName
Robert Optional     Dickey

更新查询:

UPDATE your_table
SET lastName = SUBSTRING_INDEX(@str,SUBSTRING_INDEX(@str,' ',-1),1),
firstName = SUBSTRING_INDEX(@str,' ',-1);

注意:它适用于全名中的任何数字空格。它只是将最后一个空格后面的字符串视为名字。

【讨论】:

以上是关于将一列分成两列的更新?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中通过多个分隔符将一列分成两列

应用T-SQL语言,如何将一列的只分成两列显示,这样的语句怎么写呢?

怎么用excel把一列变成两列

熊猫将一列映射到两列的组合

excel如何将一列按奇偶数分成两列

excel如何将一行的奇偶列分成两行,如1,2,3,4,5,6一行变成1,3,5和2,4,6两行