sql server學習筆記---將一個字段根據某個字符拆分成多列顯示

前言 

之前一個項目運營要數據有點小麻煩,一開始我本着能動嘴就不動手的原則,讓她們動手的,沒想到她們用魔法打敗了魔法

 

一,摸索

需求點:將收貨地址根據符拆分成多列顯示,,,

數據格式:(中國,北京,東城區,xxxx小區,xx棟,xxx單元,xxx號)

返回效果:

國家   省份   城市      小區            樓棟       單元       門號

中國  北京   東城區  xxxx小區    xx棟       xxx單元   xxx號


一眼看去問題不大,使用PARSENAME函數分分鐘搞定,,

PARSENAME sql server 自帶函數,被分割的字符串必須是 '.',而且只能分割出4個字段,

所以使用的時候需要替換分割字符如:

SELECT address,
PARSENAME(REPLACE(address,',','.'),4) as 國家,
PARSENAME(REPLACE(address,',','.'),3) as 省市,
PARSENAME(REPLACE(address,',','.'),2) as 區域,
PARSENAME(REPLACE(address,',','.'),1) as 小區
FROM [dbo].[Address]

定睛一看不好使,,,沒有解決問題,之後看了sql文檔發現了這個玩意STRING_SPLIT(SQL Server 2016 新加入)

STRING_SPLIT 僅採用兩個參數。 第一個是字符串,第二個是單個字符。STRING_SPLIT(字符串,分隔符) (STRING_SPLIT (string, separator))

查詢SQL,

declare @str varchar(50)
set @str='中國,北京,東城區,xxxx小區,1棟'
select value from STRING_SPLIT(@str, ',')//默認字段 value

結果:
value
中國
北京
東城區
xxxx小區
1棟

這麼一看差不多了,

二,自己動手

 

//@str :要分割的字符串
//@chars:分割符號
//@i :字符位置索引

create function [dbo].[split_str](@str varchar(50),@chars varchar(50), @i int)
returns varchar(50)
as
begin
declare @val varchar(50)
declare @SorderIdTemp table(
[Id] int identity(1,1),
[Value] nvarchar(max)) --定義臨時表

insert into @SorderIdTemp([Value])
select value from STRING_SPLIT(@str, @chars)
select @val=value from @SorderIdTemp where [Id]=@i
delete from @SorderIdTemp
return @val
end

GO


效果:

 

declare @str varchar(50)
set @str='中國,北京,東城區,xxxx小區,xx棟,xxx單元,xxx號'


select [dbo].[split_str](@str,',',1) as 國家,[dbo].[split_str](@str,',',2) as 省份,
[dbo].[split_str](@str,',',3) as 城市,[dbo].[split_str](@str,',',4) as 小區,[dbo].[split_str](@str,',',5) as 樓棟,
[dbo].[split_str](@str,',',6) as 單元, [dbo].[split_str](@str,',',7) as 門號

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章