实现SQL Server中的切割字符串SplitString函数,返回Table

有时我们要用到批量操作时都会对字符串进行拆分,可是SQL Server中却没有自带Split函数,所以要自己来实现了。

-- =============================================
-- Author:        chenlong
-- Create date: 2015-02-02
-- Description:    根据逗号分隔拆分字符串,返回table
-- =============================================
ALTER FUNCTION [dbo].[fn_SplitString]
(
    @Input nvarchar(max), --输入字符串
    @Separator nvarchar(max)=‘,‘, --分隔符
    @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 the return variable here
    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]

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

方法二:

Create function [dbo].[f_split](@aString varchar(max),@pattern varchar(10))
returns @temp table(r int,a varchar(100))
--实现split功能 的函数
-- select a from dbo.f_split(‘我:们a:a:b: ‘,‘:‘)
as
begin
    declare @i int
    declare @row int
    set @row=1
    set @aString=rtrim(ltrim(@aString))
    set @i=charindex(@pattern,@aString)
    while @i>=1
    begin
        insert @temp values(@row,left(@aString,@i-1))
        set @aString=right(@aString,len(@aString)-@i)
        set @i=charindex(@pattern,@aString)
        set @row=@row+1
    end
    if @aString<>‘‘
       insert @temp values(@row,@aString)
    return
end
时间: 2024-08-07 09:27:59

实现SQL Server中的切割字符串SplitString函数,返回Table的相关文章

实现SQL Server中的切割字符串SplitString函数

有时我们要用到批量操作时都会对字符串进行拆分,可是SQL Server中却没有自带Split函数,所以要自己来实现了.没什么好说的,需要的朋友直接拿去用吧 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 @Sep

Sql Server中常用的字符串函数

len(expression) 返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格. datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格length(expression,variable)指定字符串或变量名称的长度.substring(expression,start,length) 不多说了,取子串right(char_expr,int_expr) 返回字符串右边int_expr个字符concat(str1,str2,...)返回来自于参数连结

在SQL SERVER中实现RSA加解密函数(第二版)

/*************************************************** 作者:herowang(让你望见影子的墙) 日期:2010.1.5 注: 转载请保留此信息 更多内容,请访问我的博客:blog.csdn.NET/herowang ****************************************************/ /* 本次修改增加了unicode的支持,但是加密后依然显示为进制数据,因为进行RSA加密后所得到的unicode编码是无

SQL Server 中的窗口函数(2012 新函数)

简介 SQL Server 2012之后对窗口函数进行了极大的加强,但对于很多开发人员来说,对窗口函数却不甚了解,导致了这样强大的功能被浪费,因此本篇文章主要谈一谈SQL Server中窗口函数的概念. 什么是窗口函数 窗口函数,也可以被称为OLAP函数或分析函数.理解窗口函数可以从理解聚合函数开始,我们知道聚合函数的概念,就是将某列多行中的值按照聚合规则合并为一行,比如说Sum.AVG等等,简单的概念如图1所示. 图1.聚合函数 因此,通常来说,聚合后的行数都要小于聚合前的行数.而对于窗口函数

Sql Server中三种字符串合并方法的性能比较

最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做.        示例:        有表內容﹕        名称  內容         1     abc        1      aaa        1      dddd        2      1223        2       fkdjfd           --------------------------------        结果﹕        1 

在SQL SERVER中批量替换字符串的方法

UPDATE MainData SET Content = REPLACE(CAST(Content AS VARCHAR(8000)) , 'XM00000137' , 'XM00000078') WHERE [Key] IN (SELECT md_key FROM index_md_inProject WHERE md_inProject = 'XM00000137') 使用 replace 函数,具体的格式为: update [table表名] set [Fields字段名]=replac

如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置

按如下所示分离数据库: use master go sp_detach_db 'mydb' go 然后,将数据和日志文件从当前位置 (D:\Mssql7\Data) 复制到新位置 (E:\Sqldata). 按如下所示重新附加指向新位置中这些文件的数据库: use master go sp_attach_db 'mydb','E:\Sqldata\mydbdata.mdf','E:\Sqldata\mydblog.ldf' go 使用 sp_helpfile 确认文件位置的更改: use myd

sql server日期时间转字符串

转自:http://www.cnblogs.com/zhangq723/archive/2011/02/16/1956152.html 一.sql server日期时间函数Sql Server中的日期与时间函数 1.  当前系统日期.时间     select getdate()  2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值   例如:向日期加上2天    select dateadd(day,2,'2004-10-15')  --返回:2004-1

SQL Server 日期时间转字符串

一.sql server日期时间函数 Sql Server中的日期与时间函数 1.  当前系统日期.时间     select getdate() 2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值    例如:向日期加上2天    select dateadd(day,2,'2004-10-15')  --返回:2004-10-17 00:00:00.000 3. datediff 返回跨两个指定日期的日期和时间边界数.    select datedif