我对SQL很新,我实际上只是在Access中构建一个小型数据库,尽管如果有必要的功能,Access无法做到,我将在SQL Server中重新制作表。
这是我的情况,我有一个来自第三方数据转储的名单。在我们的数据库中,我需要能够在单独的列中比较名字和姓氏。
我一直在尝试使用InStr,左和右 - 但我的结果很奇怪
Left([NewClaims]![Claimant Full Name],InStr([NewClaims]![Claimant Full Name],",")-1) AS LastName,
Right([NewClaims]![Claimant Full Name],InStr([NewClaims]![Claimant Full Name], ", ")+2) AS FirstName,
在某些名称上它完美运作
West, Krystal --becomes--> LastName = West, FirstName= Krystal
关于其他名称,在共振峰中类似,它不起作用
Dalton, Kathy ----> LastName = Dalton, First Name = ON, KATHY
在具有中间姓名首字母的姓名上我得到
Earles, Barbara A. ----> LastName = Earles, FirstName= ARBARA A. (one missing letter)
OR
Beard, Chekitha G. ----> LastName = Beard, FirstName= KITHA G. (three missing letters)
我很沮丧。谁能提供关于如何使这项工作的另一个想法?我似乎有姓氏,但我不能让第一个名字始终正确。
答案 0 :(得分:2)
试试这个。但我假设总是用逗号分隔姓氏和名字。
select
txt,
LastName = left(txt,charindex(',',txt)-1),
FirstName = ltrim(right(txt,len(txt)-charindex(',',txt)))
from (
select 'West, Krystal' as txt union all
select 'Dalton, Kathy' union all
select 'Earles, Barbara A.' union all
select 'Beard, Chekitha G.'
) x
您的错误在于,当使用right
提取名字时,您没有考虑字符串的长度。