更新,案例sql无法正常工作

时间:2014-03-25 20:09:03

标签: sql

我尝试更新表,FirstName和LastName中的2个字段,从同一个表中获取数据,但是从名称字段中获取包含名字和姓氏的数据。

我试过了:

UPDATE Table SET FirstName = (SELECT CASE
                WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1) 
                ELSE name 
                END 
                    from Table), 
LastName = (select CASE
         WHEN name LIKE '% %' THEN RIGHT(name, Charindex(' ', Reverse(name)) - 1)
       END  from Table)

我收到以下错误消息:子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

1 个答案:

答案 0 :(得分:2)

您不需要子查询,只需逻辑:

UPDATE Table
    SET FirstName = (CASE WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1) 
                          ELSE name 
                     END),
        LastName = (CASE WHEN name LIKE '% %' THEN RIGHT(name, Charindex(' ', Reverse(name)) - 1)
                    END
                   );

或者,添加where语句并执行两项更新:

UPDATE Table
    SET FirstName = LEFT(name, Charindex(' ', name) - 1),
        LastName = RIGHT(name, Charindex(' ', Reverse(name)) - 1)
    WHERE name LIKE '% %';

UPDATE TABLE
    SET LastName = NULL
    WHERE name not like '% %';

如果字段已经是NULL,则可能不需要第二个。