我的数据如下表
我想从名称中删除标题(Miss Miss,Dr等),如果存在两个名称,则希望将数据拆分为名字和姓氏。
我想在select语句中使用它。我可以使用CASE语句删除标题,但无法在相同的case语句中将名称拆分为。
我想要这样的数据,但是在select语句中,标题已删除,名称已拆分。
答案 0 :(得分:2)
您可以使用子字符串轻松完成此操作。您希望按空格分割字符串,然后忽略索引中的第一个元素,大致如下:
SELECT SUBSTRING(@ourName, 1, CHARINDEX(' ', @ourName)) AS [First],
SUBSTRING(@ourName, CHARINDEX(' ', @ourName) + 2, LEN(@ourName)) AS[Last]
未经测试,但这与您想要做的非常接近。你将把字符串分成如下数组:
[0]前缀 [1]名字 [2]姓氏
只抓住1和2.如果没有前缀,这将会中断。
答案 1 :(得分:1)
尝试以下UDF
create function dbo.ExtractName(@TheName VARCHAR(200),@Which CHAR(1) )
returns VARCHAR(100)
as
begin
declare @Ans VARCHAR(100)
-- Get rid of common saluations
SET @theName = replace(replace(@theName,'mr.',''),'mrs.','')
SET @theName = replace(replace(@theName,'ms',''),'miss','')
SET @theName = replace(replace(@theName,'dr.',''),'sir','')
SET @Ans = rtrim(ltrim(@theName))+' '
-- Assume last name
if @Which = 'L'
set @ans = rtrim(substring(@ans,charindex(' ',@ans)+1,99))
else
set @ans = left(@ans,charindex(' ',@ans)-1)
if len(@ans)='' set @ans= null
return @ans
end
go
print dbo.ExtractName('Mr. Rick Pepper','F')
print dbo.ExtractName('Mr. Rick Pepper','L')
提取名称可能非常复杂,因为有大量可能的前缀,有时名称最后一次存储。有些名称有后缀,如Jr.或PHD。希望这个UDF为您提供一个起点...
答案 2 :(得分:0)
您可以将Jeremy答案与连接CASE语句结合使用以完成您的要求。这将是一个相当复杂的句子,但它可以工作。
答案 3 :(得分:0)
试试这个
declare @tbl table (GoodName varchar(50))
insert into @tbl select 'Mr.Rick Pepper'
insert into @tbl select 'Miss Lara Harper'
insert into @tbl select 'Mrs Kim'
insert into @tbl select 'Dr.Alan White'
insert into @tbl select 'Adam Jones'
insert into @tbl select 'William'
insert into @tbl select 'Sir Clark'
- 计划开始
select
case when CHARINDEX(',',FilteredName) = 0 then FilteredName else SUBSTRING(FilteredName,0,CHARINDEX(',',FilteredName)) end as FirstName
,case when CHARINDEX(',',FilteredName) = 0 then Null else SUBSTRING(FilteredName,CHARINDEX(',',FilteredName)+1,LEN(FilteredName)) end as LastName
from (
select REPLACE(LTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(GoodName,'Mr.',''),'Miss',''),'Mrs',''),'Dr.',''),'Sir','')),' ',',') as FilteredName
from @tbl
)x(FilteredName)
输出
FirstName LastName
Rick Pepper
Lara Harper
Kim NULL
Alan White
Adam Jones
William NULL
Clark NULL