代码改变世界
2012-12-19 22:03
陈银福
阅读(157)
评论()
收藏
举报
- 提供 sql server 字符串拆分函数,提供给大家参考:
- 方法一:通过分隔符,将一个字符串拆分成多个字符串。例如:s2001|s2003|s2005 等
- 主要思路,通过索引CHARINDEX方法索引字符串出现的位置和SUBSTRING方法截取字符串,
- 并将字符串保存到待返回的表变量。
- CREATE FUNCTION [dbo].[StringSplitMore]
- (
- @string varchar(1000), --被分隔的字符串
- @separator VARCHAR(10) --分隔字符串
- )
- RETURNS @temp TABLE
- (
- Item varchar(20) --被分隔后的字符串变量
- )
- AS
- BEGIN
- DECLARE @Item VARCHAR(20)
- DECLARE @CurrentIndex INT --当前索引变量
- DECLARE @NextIndex INT --下一个索引变量
- DECLARE @StrLength INT --字符串的长度
- DECLARE @SplitLength INT --分隔字符长度
- IF ((@string IS NULL) OR (@separator IS NULL))
- RETURN
- SET @CurrentIndex=1
- SET @StrLength=DATALENGTH(@string)
- SET @SplitLength=DATALENGTH(@separator)
- --判断是否字符串结束是否加分隔符,如果没有,自动加上分隔符,用于判断结束。
- IF(CHARINDEX(@separator,@string,@StrLength-@SplitLength)=0)
- SET @string=@string+@separator
- WHILE @CurrentIndex<@StrLength
- BEGIN
- --CHARINDEX(子串,被搜索的字符串)
- SET @NextIndex=CHARINDEX(@separator,@string,@CurrentIndex)
- SET @Item=SUBSTRING(@string,@CurrentIndex,@NextIndex-@CurrentIndex)
- SET @CurrentIndex=@NextIndex+1
- --把临时变量的值放到要返回的表中
- INSERT INTO @temp VALUES(@Item)
- END
- RETURN
- END
- 方法二:将一个字符串分隔为两个字符串,同理可以字符长分隔为n个表示意义不同的字符串 1^2003^s2005^kk 等
- 采用与方法一同样的方式,去除首位分隔符,然后将字符串分隔为两个字符串
- CREATE FUNCTION [dbo].[StringSplitTwo]
- (
- @string varchar(20),
- @separator VARCHAR(5)
- )
- RETURNS @temp TABLE
- (
- FirstItem varchar(10),
- SecondItem varchar(10)
- )
- AS
- BEGIN
- DECLARE @FirstItem VARCHAR(10)
- DECLARE @SecondItem VARCHAR(10)
- DECLARE @Index INT
- DECLARE @StrLength INT --字符串的长度
- DECLARE @SplitLength INT
- IF ((@string IS NULL) OR (@separator IS NULL))
- RETURN
- SET @StrLength=DATALENGTH(@string)
- SET @SplitLength=DATALENGTH(@separator)
- --去除字符串前分隔符
- IF(CHARINDEX(@separator,@string,1)=1)
- BEGIN
- SET @string=SUBSTRING(@string,@SplitLength+1,@StrLength)
- SET @StrLength=DATALENGTH(@string)
- END
- --去除字符串后分隔符
- IF(CHARINDEX(@separator,@string,@StrLength-@SplitLength)>0)
- BEGIN
- SET @string=SUBSTRING(@string,1,@StrLength-@SplitLength)
- SET @StrLength=DATALENGTH(@string)
- END
- SET @Index=CHARINDEX(@separator,@string,1)
- IF(@Index>0 AND @Index>@SplitLength)
- BEGIN
- SET @FirstItem=SUBSTRING(@string,1,@Index-@SplitLength)
- SET @SecondItem=SUBSTRING(@string,@Index+@SplitLength,@StrLength)
- INSERT INTO @temp(FirstItem,SecondItem)
- VALUES(@FirstItem,@SecondItem)
- END
- RETURN
- END