SQL中實現(xiàn)SPLIT函數(shù)幾種方法總結(必看篇)
更新時間:2016年09月06日 14:58:19 投稿:jingxian
下面小編就為大家?guī)硪黄猄QL中實現(xiàn)SPLIT函數(shù)幾種方法總結(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
例1
代碼如下
create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a varchar(100)) --實現(xiàn)split功能 的函數(shù) --date :2003-10-14 as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin insert @temp values(left(@SourceSql,@i-1)) set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) set @i=charindex(@StrSeprate,@SourceSql) end if @SourceSql<>'' insert @temp values(@SourceSql) return end select * from dbo.f_split('1,2,3,4',',') a -------------------- 1 2 3 4 (所影響的行數(shù)為 4 行)
例2
代碼如下
--SQL Server Split函數(shù) --Author:zc_0101 --說明: --支持分割符多字節(jié) --使用方法 --Select * FROM DBO.F_SQLSERVER_SPLIT('1203401230105045','0') --select * from DBO.F_SQLSERVER_SPLIT('abc1234a12348991234','1234') --Select * from DBO.F_SQLSERVER_SPLIT('ABC',',') CREATE FUNCTION F_SQLSERVER_SPLIT(@Long_str varchar(8000),@split_str varchar(100)) RETURNS @tmp TABLE( ID inT IDENTITY PRIMARY KEY, short_str varchar(8000) ) AS BEGIN DECLARE @long_str_Tmp varchar(8000),@short_str varchar(8000),@split_str_length int SET @split_str_length = LEN(@split_str) IF CHARINDEX(@split_str,@Long_str)=1 SET @long_str_Tmp=SUBSTRING(@Long_str,@split_str_length+1,LEN(@Long_str)-@split_str_length) ELSE SET @long_str_Tmp=@Long_str IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1 SET @long_str_Tmp=@long_str_Tmp+@split_str ELSE SET @long_str_Tmp=@long_str_Tmp IF CHARINDEX(@split_str,@long_str_Tmp)=0 Insert INTO @tmp select @long_str_Tmp ELSE BEGIN WHILE CHARINDEX(@spl(www.dbjr.com.cn)it_str,@long_str_Tmp)>0 BEGIN SET @short_str=SUBSTRING(@long_str_Tmp,1,CHARINDEX(@split_str,@long_str_Tmp)-1) DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int SET @long_str_Tmp_LEN = LEN(@long_str_Tmp) SET @split_str_Position_END = LEN(@short_str)+@split_str_length SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,@long_str_Tmp_LEN-@split_str_Position_END)) IF @short_str<>'' Insert INTO @tmp select @short_str END END RETURN END
例3
Sql2000andSql2005實用的Split函數(shù)
代碼如下
sql2000 CREATE FUNCTION [dbo].[splitstring_array] ( @string nvarchar(4000),@split char(1) ) RETURNS @array table ( oneStr nvarchar(100) ) AS BEGIN declare @v_code varchar(60) --zell 2006-05-26 --set @string = replace(@string,' ',@split) --set @string = replace(@string,',',@split) while len(@string) > 0 begin if charindex(@split,@string,1) != 0 begin set @v_code = substring(@string,1,charindex(@split,@string,1)-1) set @string = substring(@string,charindex(@split,@string,1)+1,len(@string)) end else if charindex(@split,@string,1) = 0 begin set @v_code = @string set @string = '' end insert into @array(onestr) values(@v_code) end RETURN END sql2005 CREATE function [dbo].[func_splitid] (@str varchar(max),@split varchar(10)) RETURNS @t Table (c1 nvarchar(100)) AS BEGIN DECLARE @x XML SET @x = CONVERT(XML,'<items><item id="' + REPLACE(@str, @split, '"/><item id="') + '"/></items>') INSERT INTO @t SELECT x.item.value('@id[1]', 'nvarchar(100)') FROM @x.nodes('//items/item') AS x(item) RETURN END
以上這篇SQL中實現(xiàn)SPLIT函數(shù)幾種方法總結(必看篇)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
mysql中distinct和group?by的區(qū)別淺析
distinct簡單來說就是用來去重的,而group by的設計目的則是用來聚合統(tǒng)計的,兩者在能夠實現(xiàn)的功能上有些相同之處,但應該仔細區(qū)分,下面這篇文章主要給大家介紹了關于mysql中distinct和group?by區(qū)別的相關資料,需要的朋友可以參考下2023-05-05MySQL日期函數(shù)與日期轉換格式化函數(shù)大全
Mysql作為一款開元的免費關系型數(shù)據(jù)庫,用戶基礎非常龐大,本文列出了MYSQL常用日期函數(shù)與日期轉換格式化函數(shù)2018-03-03