在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