SQL Server 完美SPLIT函数
来源:互联网 发布:淘宝网广场舞裙子 编辑:程序博客网 时间:2024/06/05 15:50
--SQL Server Split函数--Author:zc_0101 --说明:--支持分割符多字节--使用方法 --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(@split_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
From: http://www.cnblogs.com/zc_0101/archive/2009/06/30/1513776.html
----------------------------------------------------------------------------------------------------
下面是自己换种思路写的方法
--另外一种设计思路ALTER FUNCTION F_SQLSERVER_SPLIT_NEW(@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)--NO SPLITIF CHARINDEX(@split_str,@Long_str) = 0BEGINset @short_str = @Long_strIF @short_str<>'' Insert INTO @tmp select @short_str END ELSEBEGINSET @long_str_Tmp = @Long_str --TEMP STR HAS SPLITWHILE(CHARINDEX(@split_str,@long_str_Tmp)> 0)BEGIN--SAVE THE FIRST SPLIT STRset @short_str = substring(@long_str_Tmp,0,CHARINDEX(@split_str,@long_str_Tmp))IF @short_str<>'' INSERT INTO @tmp SELECT @short_str--SET TEMP STR TO OTHER PARTSSET @long_str_Tmp=SUBSTRING(@long_str_Tmp,@split_str_length+1,LEN(@long_str_Tmp)-@split_str_length)--IF TEMP STR NO SPLIT, SAVE HEREIF CHARINDEX(@split_str,@long_str_Tmp)= 0 AND @long_str_Tmp <>''BEGIN set @short_str = @long_str_TmpINSERT INTO @tmp SELECT @short_strENDENDENDRETURN END
上面自己写的方法还有BUG:以下语句中会出错。
SELECT * FROM dbo.FN_SQLSERVER_SPLIT('c3058e26-ff3c-4f0d-92a5-76f34340de3b,7f48477c-860e-4a8d-a14f-7844beb6671c', ',');
SELECT * FROM dbo.fn_split('c3058e26-ff3c-4f0d-92a5-76f34340de3b,7f48477c-860e-4a8d-a14f-7844beb6671c', ',');--此方法请看下面
另外提供一个更完美的。
SET QUOTED_IDENTIFIER ONSET ANSI_NULLS ONGOcreate function fn_split(@SourceSql varchar(8000),@StrSeprate varchar(10))returns @temp table(AllItem varchar(100))--实现split功能 的函数as begindeclare @i intset @SourceSql=rtrim(ltrim(@SourceSql))set @i=charindex(@StrSeprate,@SourceSql)while @i>=1begininsert @temp values(left(@SourceSql,@i-1))set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)set @i=charindex(@StrSeprate,@SourceSql)endif @SourceSql<>'\'insert @temp values(@SourceSql)return endGO
- SQL Server 完美SPLIT函数
- SQL Server 完美SPLIT函数
- SQL Server 完美SPLIT函数
- SQL Server 完美SPLIT函数
- SQL Server Split函数
- sql server 中 split 函数
- sql server 自定义split函数
- SQL Server中自定义Split函数
- SQL Server中自定义Split函数
- SQL Server里的Split函数
- SQL server实现split功能的函数
- sql server 自定义split(分割)函数
- SQL Server 2005 自定义split 函数
- Sql Server 2005自定义Split函数
- SQL Server数据库Split函数的使用方法
- MS SQL SERVER 自定义split函数
- SQL Server里的Split函数
- SQL Server里用Split函数分割字符串
- 去掉Chrome,Safari等浏览器input,select,textarea等form元素的高亮效果
- μC/OS-Ⅱ的移植要点小谈
- 华为编程大赛_将字符数组内的数字排序
- ant url path pattern
- 优酷土豆合而不同 土豆逐渐边缘化显尴尬
- SQL Server 完美SPLIT函数
- Linux下中文乱码
- 嵌入式RTOS在MSP430单片机上的实现
- java数据类型详解
- selenium学习总结之常用命令篇
- 关于as3中如何实现函数的重载
- 使用SSH实验
- flex调用as代码
- android201--什么是MTK