我尝试更新表,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。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
答案 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
,则可能不需要第二个。