在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