我有一个名为CustomerName的列的表,它存储了客户的全名(即客户的名字 - 名字,姓氏和任何其他名称)。
我想重新设计这个表,使得我不应该只拥有CustomerName字段,而应该拥有CustomerFirstName,CustomerLastName和CustomerOtherNames(然后customerName可以是3个字段的串联)。
我已经在表格中有客户记录,其中包含以下格式的客户名称
Mary Joy
圣罗伊
现在我需要运行一个更新查询,将Tom,Mary和San设置为CustomerFirstName,并将John,Joy和Roy设置为各自行的CustomerLastName,但我仍然坚持这一点。
答案 0 :(得分:1)
您可以使用以下内容:
SELECT SUBSTRING(CustomerName, 1, CHARINDEX(' ', CustomerName) - 1) AS [FirstName],
SUBSTRING(CustomerName, CHARINDEX(' ', CustomerName) + 1, LEN(CustomerName)) AS [LastName]
FROM yourTableName
我从http://www.sql-server-helper.com/tips/split-name.aspx
获得了此解决方案希望这有帮助。
马特
答案 1 :(得分:1)
以下将Matt(Lima)建议的公式整合到实际的UPDATE查询中;它还处理各种情况,如
或者,可以通过添加WHERE子句(WHERE CustomerName like('%%')来取消旨在确保存在空间的额外测试。
-- 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
答案 2 :(得分:0)
尝试以下方法: SELECT SUBSTR(CustomerName,1,INSTR(CustomerName,'',1,1)-1)作为first_name,SUBSTR(CustomerName,INSTR(客户名称,',1,1))作为fromTableName的last_name
(Oracle)的