sqlserver相同字符只取一个

问题是: 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

原文地址:https://www.cnblogs.com/yzenet/p/2636329.html