zoukankan      html  css  js  c++  java
  • sqlserver中实现split分割字符串函数常用的

    sqlserver中实现split分割字符串函数常用的.

    IF OBJECT_ID (N'fn_split') IS NOT NULL
    DROP FUNCTION  fn_split
    go
    CREATE  function dbo.fn_split
    (
    @inputstr varchar(8000),
    @seprator varchar(10),
    @p int                   --要取第几个数据,从0开始,如果要返回分割后的数组列表清删除--##部分即可
    )
    returns @temp table (a varchar(200))
    as

    begin
     declare @i int
     declare @n int  --记录循环的次数
     set @inputstr = rtrim(ltrim(@inputstr))
     set @i = charindex(@seprator, @inputstr)
     SET @n =0        --##

      WHILE @i>=1
     begin
      IF  @p=@n  --##
       begin
         insert @temp values(left(@inputstr, @i - 1))
       end
      set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
      set @i = charindex(@seprator, @inputstr)
      SET @n = @n+1 --##
     END

    if @inputstr <> '' --最后一位
     IF  @p=@n         --##
      insert @temp values(@inputstr)
    return
    end
    go

    方法一 
    CREATE  FUNCTION uf_StrSplit '1.1.2.50','.'
    (@origStr varchar(7000),  --待拆分的字符串
    @markStr varchar(100))  --拆分标记,如','
    RETURNS @splittable table
    (
    str_id  varchar(4000) NOT NULL, --编号ID
    string  varchar(2000) NOT NULL --拆分后的字符串
    )
    AS
    BEGIN
    declare @strlen int,@postion int,@start int,@sublen int,
    @TEMPstr varchar(200),@TEMPid int
    SELECT @strlen=LEN(@origStr),@start=1,@sublen=0,@postion=1,
    @TEMPstr='',@TEMPid=0
    if(RIGHT(@origStr,1)<>@markStr )
    begin
    set @origStr = @origStr + @markStr
    end
    WHILE((@postion<=@strlen) and (@postion !=0))
    BEGIN
    IF(CHARINDEX(@markStr,@origStr,@postion)!=0)
    BEGIN
    SET @sublen=CHARINDEX(@markStr,@origStr,@postion)-@postion;
    END
    ELSE
    BEGIN
    SET @sublen=@strlen-@postion+1;
    END
    IF(@postion<=@strlen)
    BEGIN
    SET @TEMPid=@TEMPid+1;
    SET @TEMPstr=SUBSTRING(@origStr,@postion,@sublen);
    INSERT INTO @splittable(str_id,string)
    values(@TEMPid,@TEMPstr)
    IF(CHARINDEX(@markStr,@origStr,@postion)!=0)
    BEGIN
    SET @postion=CHARINDEX(@markStr,@origStr,@postion)+1
    END
    ELSE
    BEGIN
    SET @postion=@postion+1
    END
    END
    END
    RETURN
    END
    方法二
    create function dbo.fn_split
    (
    @inputstr varchar(8000),
    @seprator varchar(10)
    )
    returns @temp table (a varchar(200))
    as

    begin
    declare @i int

    set @inputstr = rtrim(ltrim(@inputstr))
    set @i = charindex(@seprator, @inputstr)

    while @i >= 1
    begin
    insert @temp values(left(@inputstr, @i - 1))

    set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
    set @i = charindex(@seprator, @inputstr)
    end

    if @inputstr <> ''
    insert @temp values(@inputstr)

    return
    end
    go

    --调用

    declare @s varchar(1000)

    set @s='Sa1,Sb1,Sc'

    select * from dbo.fn_split(@s,',')

    drop function dbo.fn_splitsqlserver中实现split分割字符串函数

  • 相关阅读:
    INewPolygonFeedback接口(实时显示所画多边形的面积)
    RichTextBox追加文本信息,并根据信息的多少自动下移
    Google tile和TMS的索引算法
    出差咸阳
    失败的 炸羊排
    年中总结
    Oracle 两个表之间的数据更新
    ArcEngine下,实现图形的擦除操作(Erase操作)
    C#中使用ListView动态添加数据不闪烁(转)
    出差略阳
  • 原文地址:https://www.cnblogs.com/yongtaiyu/p/2583728.html
Copyright © 2011-2022 走看看