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

pnwntuvh  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(268)

我有下面的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”

bxpogfeg

bxpogfeg1#

我可以这么说。
当名字有两个姓氏时,就用最后两个姓氏;当名字有一个姓氏时,也就用最后两个姓氏;名字中的字数越来越多。你需要一个更复杂的算法来找到正确的索引

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

db<>在这里摆弄

r6l8ljro

r6l8ljro2#

这有点棘手,因为如果字符串以空格开头,表达式将不会产生预期的结果。
我会用:

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

这基本上是从删除字符串的前导和尾随空格开始的,然后选择字符串中第一个空格之后的所有内容。
在你的 update 声明:

UPDATE `customer_address_entity` 
SET `lastname` = substring(trim(firstname), locate(' ', trim(firstname)) + 1)
WHERE `lastname` = ''

如果名字和姓氏之间可能有多个空格,则可以 trim() 结果字符串也是:

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

相关问题