SQL SERVER 函數舉例
- 2020 年 5 月 8 日
- 筆記
- SQL Server, SQLServer, 分割, 自定義函數
需求說明
將字元串按照指定的分隔符進行分割,並將結果按照從後往前的順序倒序排列,拼接後的結果用『/』符連接。(也可以按照指定符號分割為多個列,修改最後一部分即可)
創建測試表及數據
/* 創建一張測試表及數據 */ create table tmp(id int primary key ,name varchar(200)); insert into tmp select 1,'組長,班長,校長,委員長'; insert into tmp select 2 ,'連長,營長,師長,軍長,司令'; insert into tmp select 3 ,'村長,鎮長,區長,市長,廳長,省長,部長';
創建函數
create FUNCTION [dbo].[f_split] ( @str NVARCHAR(500), @delimiter NVARCHAR(20) )RETURNS @table2 TABLE(val NVARCHAR(500)) AS BEGIN DECLARE @index INT,@startsplit INT,@id INT ,@maxid int,@id2 int declare @table table (id int,val nvarchar(50)) SELECT @index=CHARINDEX(@delimiter,@str),@startsplit=1,@id=1 WHILE @index>0 BEGIN IF @id>1 BEGIN SELECT @startsplit=@index+LEN(@delimiter) SELECT @index=CHARINDEX(@delimiter,@str,@startsplit) END IF @index>0 BEGIN INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,@index-@startsplit)) END ELSE BEGIN INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,LEN(@str)-@startsplit+1)) END SELECT @id=@id+1 END select @id2=Min(id) from @table select @maxid=MAX(id) from @table insert into @table2 select val from @table where id=@maxid select @maxid= @maxid -1 while @id2<=@maxid begin update @table2 set val=val+'/'+(select val from @table where id=@maxid ) select @maxid =@maxid- 1 end RETURN END
執行查詢
select name,(select val from [f_split](name,',')) from tmp;
結果如下
TIPs:
以上函數包含字元串截取函數、字元串長度、字元串位置等,如需獲取該函數的每步說明可以聯繫我獲取,謝謝。