将名称拆分为first和last,并插入现有的第一个Name列和last name列sql

时间:2018-01-30 19:48:54

标签: mysql pymysql

我有一个表名为CustomerName的列,其中包含名字,中间名和姓。有些名称可能没有中间名。在同一个表中,我有3列名为firstNamemiddleNameLastName,其中填充了None值。我需要拆分CustomerName列并将它们放在各自的列中。我如何在mysql中做到这一点?我尝试了以下但得到错误:

UPDATE xcust SET
LastName = SUBSTRING_INDEX(trim(CustomerName),' ',-1) 
case 
when LENGTH(trim(CustomerName)) - LENGTH(REPLACE(trim(CustomerName), ' ', 
'')) = 1 then null
else  MiddleName = SUBSTRING_INDEX(SUBSTRING_INDEX(trim(CustomerName),' 
',2),' ',-1) 
end
FirstName = SUBSTRING_INDEX(trim(CustomerName),' ',1)
where CustomerName = 'JAMES G STAHL'"""

我收到的 错误 是:

  

ProgrammingError:(1064,“你的SQL语法有错误;请检查   与您的MariaDB服务器版本对应的手册   在'case \ n当LENGTH(trim(CustomerName))附近使用正确的语法 -   LENGTH(REPLACE(trim(CustomerName),'','在第3行“)

我使用pymysql来运行查询。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:2)

未经测试,但乍一看,您在设置的不同值之间缺少逗号,需要在case语句之外使用MiddleName。

UPDATE xcust SET
LastName = SUBSTRING_INDEX(trim(CustomerName),' ',-1),
MiddleName = 
    case when LENGTH(trim(CustomerName)) - LENGTH(REPLACE(trim(CustomerName), ' ', '')) = 1 then
        null
    else
        SUBSTRING_INDEX(SUBSTRING_INDEX(trim(CustomerName),' ',2),' ',-1)
    end,
FirstName = SUBSTRING_INDEX(trim(CustomerName),' ',1)
where CustomerName = 'JAMES G STAHL'