zoukankan      html  css  js  c++  java
  • SQL中实现SPLIT函数几种方法

    例1

    代码如下 复制代码
    create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
    returns @temp table(a varchar(100))
    --实现split功能 的函数
    --date :2003-10-14
    as
    begin
    declare @i int
    set @SourceSql=rtrim(ltrim(@SourceSql))
    set @i=charindex(@StrSeprate,@SourceSql)
    while @i>=1
    begin
    insert @temp values(left(@SourceSql,@i-1))
    set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
    set @i=charindex(@StrSeprate,@SourceSql)
    end
    if @SourceSql<>''
    insert @temp values(@SourceSql)
    return
    end

    select * from dbo.f_split('1,2,3,4',',')

    a
    --------------------
    1
    2
    3
    4

    (所影响的行数为 4 行)

    例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(@spl(www.111cn.net)it_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

    Sql2000andSql2005实用的Split函数

    代码如下 复制代码
    sql2000
    CREATE FUNCTION [dbo].[splitstring_array]
    (
    @string nvarchar(4000),@split char(1)
    )

    RETURNS @array table
    (
    oneStr nvarchar(100)
    )

    AS

    BEGIN
    declare @v_code varchar(60)

    --zell 2006-05-26
    --set @string = replace(@string,' ',@split)
    --set @string = replace(@string,',',@split)

    while len(@string) > 0
    begin
    if charindex(@split,@string,1) != 0
    begin
    set @v_code = substring(@string,1,charindex(@split,@string,1)-1)
    set @string = substring(@string,charindex(@split,@string,1)+1,len(@string))
    end
    else if charindex(@split,@string,1) = 0
    begin
    set @v_code = @string
    set @string = ''
    end
    insert into @array(onestr) values(@v_code)
    end
    RETURN
    END

    sql2005
    CREATE function [dbo].[func_splitid]
    (@str varchar(max),@split varchar(10))
    RETURNS @t Table (c1 nvarchar(100))
    AS
    BEGIN
    DECLARE @x XML
    SET @x = CONVERT(XML,'<items><item id="' + REPLACE(@str, @split, '"/><item id="') + '"/></items>')
    INSERT INTO @t SELECT x.item.value('@id[1]', 'nvarchar(100)') FROM @x.nodes('//items/item') AS x(item)
    RETURN
    END
    from:http://www.111cn.net/database/mssqlserver/53207.htm

  • 相关阅读:
    实战演习用wse上传下载文件
    [Android疑难杂症]Gallery默认和横竖屏切换选中状态问题(2.3、2.3系统存在)
    [Android疑难杂症]动态改变Background后Padding无效的问题
    Android应用开发提高系列(6)——Activity生命周期
    使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放
    使用Vitamio打造自己的Android万能播放器(8)——细节优化
    Vitamio SDK 2.0 新版发布(20120831)
    [Android]利用runas命令在不root情况下读取data下面的数据
    使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、播放列表)
    SKY IMA800S 驱动下载
  • 原文地址:https://www.cnblogs.com/alibai/p/4080129.html
Copyright © 2011-2022 走看看