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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。