问题是: a/a/b/b/b/b/c/c/c/c要得到的数据是a/b/c(sqlserver中某列的数据,如果出现这种情况,就是有相同的只要一个)
USE [BooksBrothersWebOrder]
GO
/****** Object: UserDefinedFunction [dbo].[FX_Split] Script Date: 08/13/2012 13:56:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FX_Split]
(
@SplitString varchar(200),-- 需要分隔的字符串
@Separator varchar(2) --分隔符哈
)
RETURNS varchar(800)
AS
BEGIN
DECLARE @CurrentIndex int --当前索引
DECLARE @NextIndex int --下一位索引
DECLARE @ReturnText varchar(200)-- 返回文本值
DECLARE @ReturnTextTotal varchar(800) --返回一条总和字符串
set @CurrentIndex=1 --默念当前索引表示和第一位开始
set @ReturnTextTotal = ''
DECLARE @Flag int
WHILE(@CurrentIndex<=len(@SplitString))--要分隔字符串的长度 当满足条件就会跳出
BEGIN
SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);--得到分隔符的位置
IF(@NextIndex=0 OR @NextIndex IS NULL) --如果是0或者空得到新索引的长度
SELECT @NextIndex=len(@SplitString)+1;
SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex); --截取返回
SELECT @CurrentIndex=@NextIndex+1; --索引依次变化
SELECT @Flag= [dbo].[CGF_FN_SearchChar](@ReturnTextTotal,@ReturnText)--取得函数返回值
if(@Flag=0)--表示不包含
set @ReturnTextTotal=@ReturnTextTotal+@ReturnText+'/' --就自动添加
--else --表示包含
-- set @ReturnTextTotal=@ReturnText+'/'
END
set @ReturnTextTotal=substring(@ReturnTextTotal,0,len(@ReturnTextTotal))
return @ReturnTextTotal
END
/*
判断一个字符串是否包含另外一个字符串
逐字截取搜索字符串循环与待搜索字符进行比较
*/
ALTER FUNCTION [dbo].[CGF_FN_SearchChar]
(
@inStr VARCHAR(500), --表示要比较的
@fndStr VARCHAR(500) --表示要查找的
)
RETURNS INT
AS
BEGIN
DECLARE @i INT,
@f INT,
@c VARCHAR(1)
SET @i = 1 --从1开始
SET @f = LEN(@fndStr)--得么长度
WHILE(@i <= @f)
BEGIN
SET @c = SUBSTRING(@fndStr, @i, @i) --逐字截取搜索字符串循环与待搜索字符进行比较
IF(CHARINDEX(@c,@inStr) > 0) --表示是否存在
BEGIN
RETURN 1 --存在返回1
END
SET @i = @i + 1 --自加上,好逐个比较
END
RETURN 0 --返回0表示没有
END