Mysql 在一列中选择部分值并将其复制到另一列-sql查询

Mysql 在一列中选择部分值并将其复制到另一列-sql查询,mysql,sql,string,sql-update,Mysql,Sql,String,Sql Update,我有下面的sql查询,需要对其进行修复,以修剪选择的开头和结尾的任何空白。我还需要它从firstname列中删除lastname部分: UPDATE customer_address_entity SET lastname = RIGHT(firstname,LENGTH(firstname)-LOCATE(' ',firstname)) WHERE lastname = '' 例如,如果firstname列中包含Jo de blog,而lastname列为空,我希望firstnam

我有下面的sql查询,需要对其进行修复,以修剪选择的开头和结尾的任何空白。我还需要它从firstname列中删除lastname部分:

UPDATE customer_address_entity
   SET lastname = RIGHT(firstname,LENGTH(firstname)-LOCATE(' ',firstname)) 
 WHERE lastname = ''

例如,如果firstname列中包含Jo de blog,而lastname列为空,我希望firstname列包含Jo,lastname列包含de blog,这有点棘手,因为如果字符串以空格开头,表达式将不会产生预期的结果

我将使用:

substring(trim(firstname), locate(' ', trim(firstname)) + 1)
这基本上是从删除字符串中的前导空格和尾随空格开始的,然后选择字符串中第一个空格之后的所有内容

在更新声明中:

UPDATE `customer_address_entity` 
SET `lastname` = substring(trim(firstname), locate(' ', trim(firstname)) + 1)
WHERE `lastname` = ''
如果名字和姓氏之间可能有多个空格,则也可以修剪生成的字符串:

trim(substring(trim(firstname), locate(' ', trim(firstname)) + 1))

我会同意的

当名字有两个姓氏时,就需要最后两个姓氏 当名字有1个姓氏时,也只需要最后一个姓氏 随着名字中单词数量的增加。您需要更复杂的算法来找到正确的索引


dfdeld

我会考虑使用修剪和子字符串索引函数。我还强烈建议在我们将表达式合并到UPDATE语句中之前,使用SELECT语句测试表达式,验证结果。是的,某些字符串将包含多个空格,请澄清我们将在何处合并您提到的代码的最后一部分。谢谢,还需要从firstname列中删除lastname部分。Cheers就是这样做的,所以它修剪了lastname部分,以防firstname部分后面有多个空格。是的,你可以修剪它,就像我在teh中所做的那样回答它只是文本
CREATE TABLE customer_address_entity (
  `id`INT,
  `firstname` varchar(25),
  `lastname` varchar(25) 
);

INSERT INTO customer_address_entity
  (`id`,`firstname`,  `lastname`)
VALUES
  (1,'Jo de blog ',''),(2,'Jo blog ',''),(3,'test2','test2');
SELECT * FROM customer_address_entity
id | firstname | lastname -: | :---------- | :------- 1 | Jo de blog | 2 | Jo blog | 3 | test2 | test2
    UPDATE `customer_address_entity` 
    SET `lastname` = TRIM(SUBSTRING_INDEX(TRIM(`firstname`), " "
    , IF(LENGTH(TRIM(`firstname`)) - LENGTH(REPLACE(TRIM(`firstname`), ' ', '')) > 1,-2,-1)))
    ,
    firstname = TRIM(SUBSTRING_INDEX(TRIM(`firstname`), " ", 1)) 
    WHERE `lastname` = '';
SELECT * FROM customer_address_entity
id | firstname | lastname -: | :-------- | :------- 1 | Jo | de blog 2 | Jo | blog 3 | test2 | test2