将一列分成两列的更新?
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);
注意:它适用于全名中的任何数字空格。它只是将最后一个空格后面的字符串视为名字。
【讨论】:
以上是关于将一列分成两列的更新?的主要内容,如果未能解决你的问题,请参考以下文章