|
本文章来给大家总结几个很不错的SQL Server split自定义函数了,这个函数就是字符分割函数了,在sql server中没有这个函数哦。
例1,要求取得字符串aa,dd,cc,rr,fff中某个位置的字符串,如果在C#或Java很容易通过Split来实现,但是在Sql Server中就没有直接提供Split这个函数。
当然,此类问题总是可以解决的。
代码如下
ALTER function [dbo].[core_split]
(
@str varchar(100),
@split char(1),
@index int
)
returns varchar(10) as
begin
declare @count int
declare @s varchar(10)
set @count = 0;
set @s = ''
while(charindex(@split,@str)<>0)
begin
if @count = @index begin
set @s = substring(@str,1,charindex(@split,@str)-1)
break
end
set @str = stuff(@str,1,charindex(@split,@str),'')
set @count = @count + 1
end
if charindex(@split,@str)=0 begin
set @s = @str
end
return @s
end
例如
代码如下
select dbo.core_split('aa,ss,ee,rr,da,tt',',',1)
就可获得ss
例2
代码如下
--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
例3
代码如下
=====================
--Author: <myxbing>
--Createdate: <2007/8/18>
-- Description: <拆分字符串函数>
--=============================================
CREATE FUNCTION[dbo].[Split]
(
@SplitString varchar(8000),-- nvarchar(4000)
@Separatorvarchar(2)=','
)
RETURNS@SplitStringsTableTABLE
(
[id]intidentity(1,1),
[value]varchar(8000)-- nvarchar(4000)
)
AS
BEGIN
DECLARE@CurrentIndexint;
DECLARE@NextIndexint;
DECLARE@ReturnTextvarchar(8000);-- nvarchar(4000)
SELECT@CurrentIndex=1;
WHILE(@CurrentIndex<=len(@SplitString))
BEGIN
SELECT@NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
IF(@NextIndex=0OR@NextIndexISNULL)
SELECT@NextIndex=len(@SplitString)+1;
SELECT@ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
INSERTINTO@SplitStringsTable([value])
VALUES(@ReturnText);
SELECT@CurrentIndex=@NextIndex+1;
END
RETURN;
END
|
|