SQL Server 实现类似于split方法

分类:数据库
 标签:SQL Server,数据库,Split,字符串分隔拼接
   修改 | 阅读(504)| 评论(0)

在SQL Server中有时候我们要按分隔符来对一个字符串进行分隔,在其他程序语言中,我们可以很轻松地用 split 方法来实现,但在SQL Server中却没有给我们提供类似这样的方法,那么我们就要自己来写了,下面是我在做项目时参考网上的相关资料写的一个表值函数,可以解决大部分的问题。

-- =============================================
-- Author:		-- Create date: <2012-10-30>
-- Description:	实现类似于split 方法,返回表
--使用方法:
--select * from [SplitToTable]('1111;2222;3333',';')
--返回
--id  |  value
--1   |  1111
--2   |  2222
--3   |  3333
-- =============================================
 CREATE FUNCTION [dbo].[SplitToTable]
 (
     @SplitString nvarchar(max),
     @Separator nvarchar(10)=' '
 )
 RETURNS @SplitStringsTable TABLE
 (
 [id] int identity(1,1),
 [value] nvarchar(max)
 )
 AS
 BEGIN
     DECLARE @CurrentIndex int;
     DECLARE @NextIndex int;
     DECLARE @ReturnText nvarchar(max);
     SELECT @CurrentIndex=1;
     WHILE(@CurrentIndex<=len(@SplitString))
         BEGIN
             SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
             IF(@NextIndex=0 OR @NextIndex IS NULL)
                 SELECT @NextIndex=len(@SplitString)+1;
                 SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
                 INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
                 SELECT @CurrentIndex=@NextIndex+1;
             END
     RETURN;
 END

至于要实现其反方法,也就是字符串拼接,那很简单

Create FUNCTION [dbo].[Str_List]
(
	@param varchar(50)
)
RETURNS varchar(500)
AS
BEGIN
	declare @str_list varchar(500)
	set @str_list=''
	select @str_list+=colName+';' from tableName
    return @str_list
END

@param:要传入的参数
colName:要拼接的字段
tableName:表名

转载请注明出处:http://www.hejingzong.cn/blog/ViewBlog_19.aspx

您的昵称:*
QQ登录(无需注册直接登录可进行回复)
您的邮箱:(填写邮箱,如有回复可进行邮件通知)
验证码:
点击刷新