代码改变世界

sql server 字符串拆分函数实例

2012-12-19 22:03  陈银福  阅读(157)  评论(0)    收藏  举报
    1. 提供 sql server 字符串拆分函数,提供给大家参考:
    2. 方法一:通过分隔符,将一个字符串拆分成多个字符串。例如:s2001|s2003|s2005 等
    3. 主要思路,通过索引CHARINDEX方法索引字符串出现的位置和SUBSTRING方法截取字符串,
    4. 并将字符串保存到待返回的表变量。
    5. CREATE FUNCTION [dbo].[StringSplitMore]
    6. (
    7.     @string varchar(1000),      --被分隔的字符串  
    8.     @separator VARCHAR(10)  --分隔字符串
    9. )
    10.  RETURNS @temp TABLE
    11.  (
    12.      Item varchar(20)        --被分隔后的字符串变量
    13.  )
    14.  AS
    15.  BEGIN
    16.      DECLARE @Item VARCHAR(20)
    17.      DECLARE @CurrentIndex  INT   --当前索引变量
    18.      DECLARE @NextIndex  INT  --下一个索引变量
    19.      DECLARE @StrLength  INT   --字符串的长度
    20.      DECLARE @SplitLength INT  --分隔字符长度
    21.       IF ((@string IS NULL) OR (@separator IS NULL))
    22.     RETURN
    23.      SET @CurrentIndex=1
    24.      SET @StrLength=DATALENGTH(@string)
    25.      SET @SplitLength=DATALENGTH(@separator)
    26.      --判断是否字符串结束是否加分隔符,如果没有,自动加上分隔符,用于判断结束。
    27.      IF(CHARINDEX(@separator,@string,@StrLength-@SplitLength)=0)
    28.     SET @string=@string+@separator
    29.     WHILE @CurrentIndex<@StrLength
    30.           BEGIN
    31.             --CHARINDEX(子串,被搜索的字符串)
    32.              SET @NextIndex=CHARINDEX(@separator,@string,@CurrentIndex)
    33.              SET @Item=SUBSTRING(@string,@CurrentIndex,@NextIndex-@CurrentIndex)
    34.              SET @CurrentIndex=@NextIndex+1
    35.            --把临时变量的值放到要返回的表中
    36.            INSERT INTO @temp VALUES(@Item)
    37.         END  
    38.      RETURN
    39.  END
    40. 方法二:将一个字符串分隔为两个字符串,同理可以字符长分隔为n个表示意义不同的字符串 1^2003^s2005^kk 等
    41. 采用与方法一同样的方式,去除首位分隔符,然后将字符串分隔为两个字符串
    42. CREATE FUNCTION [dbo].[StringSplitTwo]
    43. (
    44.  @string varchar(20),        
    45.   @separator VARCHAR(5)
    46. )
    47.  RETURNS @temp TABLE
    48.  (
    49.      FirstItem varchar(10), 
    50.      SecondItem varchar(10)
    51.  )
    52.  AS
    53.  BEGIN
    54.      DECLARE @FirstItem VARCHAR(10) 
    55.      DECLARE @SecondItem VARCHAR(10)
    56.      DECLARE @Index  INT
    57.      DECLARE @StrLength  INT   --字符串的长度
    58.      DECLARE @SplitLength INT
    59.       IF ((@string IS NULL) OR (@separator IS NULL))
    60.   RETURN
    61.   SET @StrLength=DATALENGTH(@string)
    62.   SET @SplitLength=DATALENGTH(@separator)
    63.  --去除字符串前分隔符
    64.      IF(CHARINDEX(@separator,@string,1)=1)
    65.      BEGIN
    66.   SET @string=SUBSTRING(@string,@SplitLength+1,@StrLength)
    67.   SET @StrLength=DATALENGTH(@string)
    68.      END
    69.      --去除字符串后分隔符
    70.   IF(CHARINDEX(@separator,@string,@StrLength-@SplitLength)>0)
    71.   BEGIN
    72.   SET @string=SUBSTRING(@string,1,@StrLength-@SplitLength)
    73.   SET @StrLength=DATALENGTH(@string)
    74.   END
    75.   SET @Index=CHARINDEX(@separator,@string,1)
    76.   IF(@Index>0 AND @Index>@SplitLength)
    77.   BEGIN
    78.   SET @FirstItem=SUBSTRING(@string,1,@Index-@SplitLength)
    79.   SET @SecondItem=SUBSTRING(@string,@Index+@SplitLength,@StrLength)
    80.   INSERT INTO @temp(FirstItem,SecondItem)
    81.   VALUES(@FirstItem,@SecondItem)
    82.   END
    83.      RETURN
    84.  END