我有數據,如下面的表格刪除和數據分割成多個列在select語句
我想刪除從名稱標題(小姐先生,博士等),並希望將數據分割成第一姓名和姓氏,如果有兩個名字存在的話。
我希望在選擇語句。我可以使用CASE語句刪除標題,但無法在同一個case語句中將名稱拆分爲兩部分。
我希望這樣的數據,但在選擇語句,標題刪除和名稱分裂。
我有數據,如下面的表格刪除和數據分割成多個列在select語句
我想刪除從名稱標題(小姐先生,博士等),並希望將數據分割成第一姓名和姓氏,如果有兩個名字存在的話。
我希望在選擇語句。我可以使用CASE語句刪除標題,但無法在同一個case語句中將名稱拆分爲兩部分。
我希望這樣的數據,但在選擇語句,標題刪除和名稱分裂。
你可以做到這一點非常有子容易。你想用空格分割字符串,然後在索引忽略的第一個元素,大致是這樣的:
SELECT SUBSTRING(@ourName, 1, CHARINDEX(' ', @ourName)) AS [First],
SUBSTRING(@ourName, CHARINDEX(' ', @ourName) + 2, LEN(@ourName)) AS[Last]
沒有測試,但是這是非常接近你想要做什麼。你會打破串到像數組:但是
[0]前綴 [1]名 [2]姓
而且只抓1和2,這將打破,如果有沒有前綴。
您可以結合Jeremy的答案和級聯的CASE語句來實現您的要求。這將是一個相當複雜的句子,但它可以工作。
試試下面的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給你一個起點......
這
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'
--program開始嘗試
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)
輸出
名姓
Rick Pepper
Lara Harper
Kim NULL
Alan White
Adam Jones
William NULL
Clark NULL
謝謝,明白了。你的答案非常接近我的要求。 – Kashif 2009-11-14 22:44:40