Sql server 2005 将列值设置为另一列中字符串的一部分

Sql server 2005 将列值设置为另一列中字符串的一部分,sql-server-2005,Sql Server 2005,我有一个表,表中有一个名为CustomerName的列,该列存储了客户的全名(即客户的姓名-名、姓和任何其他名称) 我想重新设计这个表,这样我就不需要CustomerName字段,而应该有CustomerFirstName、CustomerLastName和CustomerOtherName(然后CustomerName可以是这3个字段的串联) 我已经在表中有客户记录,客户名称格式如下 客户名称 汤姆·约翰 玛丽·乔伊 圣罗伊 现在,我需要运行一个更新查询,将Tom、Mary和San设置为Cus

我有一个表,表中有一个名为CustomerName的列,该列存储了客户的全名(即客户的姓名-名、姓和任何其他名称)

我想重新设计这个表,这样我就不需要CustomerName字段,而应该有CustomerFirstName、CustomerLastName和CustomerOtherName(然后CustomerName可以是这3个字段的串联)

我已经在表中有客户记录,客户名称格式如下

客户名称 汤姆·约翰

玛丽·乔伊

圣罗伊


现在,我需要运行一个更新查询,将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)建议的公式集成到实际的更新查询中;它还处理各种情况,例如:

  • 当只有名字的时候
  • 当有前导空格或尾随空格时
  • 当名字和姓氏之间有多个空格时
或者,可以通过添加WHERE子句(WHERE CustomerName like('%%'),取消旨在确保有空格的额外测试

尝试以下方法: 从TableName中选择SUBSTR(CustomerName,1,INSTR(CustomerName',,1,1)-1)作为名字,选择SUBSTR(CustomerName,INSTR(CustomerName',,1,1))作为姓氏

(oracle)

在MS-SQL中,没有INSTR()函数,但可以很容易地将其“转换”为CHARINDEX(),并将参数四处移动。SUBSTR()也是SUBSTRING()(语法相同)。
-- 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