博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL点滴3—一个简单的字符串分割函数
阅读量:6868 次
发布时间:2019-06-26

本文共 2168 字,大约阅读时间需要 7 分钟。

原文:

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

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]

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

转载地址:http://irbfl.baihongyu.com/

你可能感兴趣的文章
nlp总结
查看>>
MongoDB数据库聚合
查看>>
ffmpeg保存原始数据PCM YUV
查看>>
Spigot 算法之中的一个 计算调和级数的和
查看>>
vue2.0如何自定义全局变量的方法
查看>>
tiny4412 裸机程序 七、重定位代码到DRAM【转】
查看>>
springMVC+json构建restful风格的服务
查看>>
HDU 5317 RGCDQ(素数个数 多校2015啊)
查看>>
iOS 10.3.3 更新背后的故事
查看>>
.NET 的WebSocket开发包详细比较(2)
查看>>
C/C++ 编程计算2的100万次方(m的n次方),超长结果输出文件
查看>>
unity3D中使用Socket进行数据通信(二)
查看>>
bytes数据类型和字符串的编码解码,三元运算,进制互换
查看>>
TCP和UDP通信(C#网络编程) ---- 系列文章
查看>>
腾讯2016笔试题-微信红包-找出数组中过半数的数字
查看>>
CentOS7 防火墙配置(关闭)
查看>>
Android静默安装实现方案,仿360手机助手秒装和智能安装功能
查看>>
Asp.Net Core获取当前上下文对象
查看>>
ppoint的使用
查看>>
MQ对比
查看>>