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

原文: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 ONGOSET QUOTED_IDENTIFIER ONGO

/*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)) asbegin     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]

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

时间: 2024-10-29 03:35:58

SQL点滴3—一个简单的字符串分割函数的相关文章

SQL语句 一个简单的字符串分割函数

复制代码 代码如下: 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(LEF

SQL点滴28—一个简单的存储过程

原文:SQL点滴28-一个简单的存储过程 在表中写入一条数据同事要向另外一个表中写入信息,所以会使用到事务.实际使用的时候还会一次向一个表中吸入多条数据,下面的存储过程,将字符串拆分成数组然后写入到表中. /****** Object: StoredProcedure [dbo].[sp_InsertEmployee] Script Date: 09/17/2012 23:28:42 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO

SQL Server 自定义字符串分割函数

原文:SQL Server 自定义字符串分割函数 一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果(标量值函数)   1 create function Func_StrArrayLength 2 ( 3 @str varchar(1024), --要分割的字符串 4 @split varchar(10) --分隔符号 5 ) 6 returns int 7 as 8 begin 9 declare @location in

malloc-小弟谢了一个简单的字符串求最大子串的程序不知道错哪里,請大神帮忙回答下

问题描述 小弟谢了一个简单的字符串求最大子串的程序不知道错哪里,請大神帮忙回答下 程序要求如下: 一个字符串,字符连续的部分为子串(不含带数字的部分) 下面是我写的程序 #include using namespace std; char* BiggestStr(char* str) { char* pStr = (char*)malloc(sizeof(str)+1); //申请一个空间存最大子串 int nCount = 0; //用于记录最大子串的长度 int J_nCount=0; ch

link实现一个简单的字符串压缩算法,比如aaabbbcccccccdddd压缩成a3b3c7d4

问题描述 link实现一个简单的字符串压缩算法,比如aaabbbcccccccdddd压缩成a3b3c7d4 link实现一个简单的字符串压缩算法,比如aaabbbcccccccdddd压缩成a3b3c7d4 解决方案 用栈不是很好解决吗?维护两个栈或一个栈,一个数组,先将字符入栈,然后判断栈顶与栈顶的下一个元素是否相同,是就出栈,数组里面的最后一个元素自加一:否则栈不动,数组下一个地址赋值1.最后输出栈内元素与数组就好了

asp.net字符串分割函数使用方法分享

 这篇文章主要介绍了asp.net字符串分割函数使用方法,需要的朋友可以参考下 先来看个简单的实例   但是其数组长度却是25,而不是3.下面这种方法是先将"[jb51.net]"替换成一个特殊字符,比如$,在根据这个字符执行Split   例如下面根据[jb51.net]分割    代码如下: string[] arrstr2 = str.Replace("[jb51.net]", "$").Split('$');     好了看其它方法.最简

用C++实现python字符串分割函数 split()与rsplit()实例

本文我们将实现两个python字符串分割函数.这两个函数的函数原型为: split(spe = None,maxsplit= -1)rsplit(spe= None ,maxsplit = -1) 这两个方法使用参数spe作为分隔符,将字符串切割成指定的maxsplit段,并以列表的形式返回切割后的字符串.默认的分隔符是空格,默认情况下对所有的分隔符进行分割: >>> >>> s = "I'm not to see you">>>

c语言中字符串分割函数及实现方法_C 语言

1.问题引入 自己在写一个linux下的模拟执行指令的时候,遇到了输入"cat a.c",要将该字符串分解成cat和a.c两个单独的字符串,虽然知道有strtok的存在,但是想自己尝试写一下,于是就自己写了一个,不过总是遇到这样或那样的问题,虽然最后调通了,不过确浪费了不少时间:后来作业交上去以后又仔细阅读了strtok函数,发现原来linux下已经改成strsep,所有在这里就写一下自己所走的过程. 2.自己写的字符串分割函数:用于分割指令,比如cat a.c最后会被分割成cat和a

PHP字符串函数教程:PHP字符串分割函数处理

PHP字符串函数在PHP网站开发中广泛使用,比如使用PHP字符串函数对字符串分割.截取.匹配.替换等处理.PHP字符串函数对于PHP入门学习者来说必不可少,本文将主要介绍PHP字符串分割函数处理心得,开启PHP字符串函数入门学习教程之旅. 常用的PHP字符串分割函数 常用的PHP分割字符串函数主要有explode.strtok.str_split,主要用来拆分字符串,并以数组或字符串形式返回,与这三个PHP字符串分隔函数相对应的,以分隔符连接拆分字符串的PHP字符串函数有implode.join