Sql server 2005 将列值设置为另一列中字符串的一部分
我有一个表,表中有一个名为CustomerName的列,该列存储了客户的全名(即客户的姓名-名、姓和任何其他名称) 我想重新设计这个表,这样我就不需要CustomerName字段,而应该有CustomerFirstName、CustomerLastName和CustomerOtherName(然后CustomerName可以是这3个字段的串联) 我已经在表中有客户记录,客户名称格式如下 客户名称 汤姆·约翰 玛丽·乔伊 圣罗伊Sql server 2005 将列值设置为另一列中字符串的一部分,sql-server-2005,Sql Server 2005,我有一个表,表中有一个名为CustomerName的列,该列存储了客户的全名(即客户的姓名-名、姓和任何其他名称) 我想重新设计这个表,这样我就不需要CustomerName字段,而应该有CustomerFirstName、CustomerLastName和CustomerOtherName(然后CustomerName可以是这3个字段的串联) 我已经在表中有客户记录,客户名称格式如下 客户名称 汤姆·约翰 玛丽·乔伊 圣罗伊 现在,我需要运行一个更新查询,将Tom、Mary和San设置为Cus
现在,我需要运行一个更新查询,将Tom、Mary和San设置为CustomerFirstName,并将John、Joy和Roy设置为各自行的CustomerLastName,但我仍然坚持这一点。您可能可以使用以下内容:
SELECT SUBSTRING(CustomerName, 1, CHARINDEX(' ', CustomerName) - 1) AS [FirstName],
SUBSTRING(CustomerName, CHARINDEX(' ', CustomerName) + 1, LEN(CustomerName)) AS [LastName]
FROM yourTableName
我从以下方面获得此解决方案:
希望这有帮助
Matt以下内容将Matt(Lima)建议的公式集成到实际的更新查询中;它还处理各种情况,例如:
- 当只有名字的时候
- 当有前导空格或尾随空格时
- 当名字和姓氏之间有多个空格时
-- Ensure no leading nor trailing spaces
UPDATE myTable
SET CustomerName = TRIM(CustomerName)
UPDATE myTable
SET FirstName = TRIM(LEFT(TRIM(CustomerName),
CASE CHARINDEX(' ', CustomerName)
WHEN 0 THEN LEN(CustomerName)
ELSE CHARINDEX(' ', CustomerName) -1
END)),
LastName = CASE CHARINDEX(' ', CustomerName)
WHEN 0 THEN ''
ELSE TRIM(SUBSTRING(CustomerName, CHARINDEX(' ', CustomerName) + 1, LEN(CustomerName))
END