SQL SERVER 函數舉例

需求說明

將字元串按照指定的分隔符進行分割,並將結果按照從後往前的順序倒序排列,拼接後的結果用『/』符連接。(也可以按照指定符號分割為多個列,修改最後一部分即可)

創建測試表及數據

/*  創建一張測試表及數據 */
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:

以上函數包含字元串截取函數、字元串長度、字元串位置等,如需獲取該函數的每步說明可以聯繫我獲取,謝謝。