• SQL点滴3—一个简单的字符串分割函数


    偶然在电脑里看到以前保存的这个函数,是将一个单独字符串切分成一组字符串,这里分隔符是英文逗号“,”  遇到其他情况只要稍加修改就好了

    CREATE FUNCTION dbo.f_splitstr(

        @str varchar(8000)
    )RETURNS @r TABLE(id int IDENTITY(1, 1), value varchar(5000))
    AS
    BEGIN
     /* Function body */
        DECLARE @pos int
        SET @pos = CHARINDEX(',', @str)
        WHILE @pos > 0
        BEGIN
            INSERT @r(value) VALUES(LEFT(@str, @pos - 1))
            SELECT
                @str = STUFF(@str, 1, @pos, ''),
                @pos = CHARINDEX(',', @str)
        END
        IF @str > ''
            INSERT @r(value) VALUES(@str)
        RETURN

    END

     截图如下

    2011-11-15 10:15:28

    今天在园子里看到另外一个实现方法,不妨借鉴一下:

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    /*by kudychen 2011-9-28 */
    CREATE function [dbo].[SplitString]
    (
    @Input nvarchar(max), --input string to be separated
    @Separator nvarchar(max)=',', --a string that delimit the substrings in the input string
    @RemoveEmptyEntries bit=1 --the return value does not include array elements that contain an empty string
    )
    returns @TABLE table
    (
    [Id] int identity(1,1),
    [Value] nvarchar(max))
    as
    begin
    declare @Index int, @Entry nvarchar(max)
    set @Index = charindex(@Separator,@Input)

    while (@Index>0)
    begin
    set @Entry=ltrim(rtrim(substring(@Input, 1, @Index-1)))

    if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
    begin
    insert into @TABLE([Value]) Values(@Entry)
    end

    set @Input = substring(@Input, @Index+datalength(@Separator)/2, len(@Input))
    set @Index = charindex(@Separator, @Input)
    end

    set @Entry=ltrim(rtrim(@Input))
    if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
    begin
    insert into @TABLE([Value]) Values(@Entry)
    end
    return

    end

    使用方法

    declare @str1 varchar(max), @str2 varchar(max), @str3 varchar(max)

    set @str1 = '1,2,3'
    set @str2 = '1###2###3'
    set @str3 = '1###2###3###'

    select [Value] from [dbo].[SplitString](@str1, ',', 1)
    select [Value] from [dbo].[SplitString](@str2, '###', 1)
    select [Value] from [dbo].[SplitString](@str3, '###', 0)

    里面还有个自增的[Id]字段哦,在某些情况下有可能会用上的,例如根据Id来保存排序等等。

    例如根据某表的ID保存排序:

    update a set a.[Order]=t.[Id]       
    from [dbo].[表] as a join [dbo].SplitString('1,2,3', ',', 1) as t on a.[Id]=t.[Value]

    具体的应用请根据自己的情况来吧



    作者:Tyler Ning
    出处:http://www.cnblogs.com/tylerdonet/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,请微信联系冬天里的一把火

  • 相关阅读:
    VS2019 离线安装方法详解
    VS2019 实用操作
    WIN7 X64位系统安装SQL SERVER2008失败总结
    给reportview传参数的操作过程
    山寨dell mini 3i的问题
    sql backup
    基于wince.net的环境,使用pocketBuilder调用webservice所需安装环境和步骤
    写了一个通用的用户选择页面,记录一下调用方法
    回顾这几年开发医药CRM的历程
    Cumulative Update package 3 for SQL Server 2008 R2三个补丁下载地址,官网下载不直接给地址,不知为什么
  • 原文地址:https://www.cnblogs.com/tylerdonet/p/1833136.html
Copyright © 2020-2023  润新知