使用数据库处理字符串的时候,诸如将实现字符串的split函数,以及两个字符串是否包含某些相同的部分,诸如此类。网上相关文章:sqlserver中比较一个字符串中是否含含另一个字符串中的一个字符
1、将字符串按分隔符截取为类数组。实现方式:根据分割符,找到分隔符在主串中的位置,然后根据位置,截取主串前面的部分,存入表,将后面的部分赋值给主串,如此循环往复,直至结束。
CREATE function split(
@string varchar(255),--待分割字符串
@separator varchar(255)--分割符
)returns @array table(item varchar(255))
as
begin
declare @begin int,@end int,@item varchar(255)
set @begin = 1
set @end=charindex(@separator,@string,@begin)
while(@end<>0)
begin
set @item = substring(@string,@begin,@end-@begin)
insert into @array(item) values(@item)
set @begin = @end+1
set @end=charindex(@separator,@string,@begin)
end
set @item = substring(@string,@begin,len(@string)+1-@begin)
if (len(@item)>0)
insert into @array(item) values(substring(@string,@begin,len(@string)+1-@begin))
return
end
2、实现方式: 实现方式与上面差不多,仍然依靠根据将字符串截取的方式。如看字符串‘ASDF,DFG' 是否存在非空字串{'ASDF','DFG'}在字符串'STR,ASD,DSGF,DFG' 里面。开始将字符串‘ASDF,DFG'根据截取,然后匹配。。。
SELECT dbo.CGF_FN_Search('STR,ASD,DSGF,DFG','ASDF',',');
CREATE FUNCTION CGF_FN_Search(@inStr VARCHAR(500),@fndStr VARCHAR(500),@doc VARCHAR(5))
RETURNS INT
AS
BEGIN
DECLARE
@i INT,
@c VARCHAR(500),
@fStr VARCHAR(500)
SET @fStr = @fndStr
WHILE(LEN(@fStr) > 0)
BEGIN
SET @i = Charindex(@doc, @fStr)
IF(@i = 0)
BEGIN
IF(CHARINDEX(@fStr,@inStr) > 0)
RETURN 1
ELSE
RETURN 0
END
ELSE
BEGIN
SET @c = SUBSTRING(@fStr,1,@i-1)
IF(CHARINDEX(@c,@inStr) > 0)
RETURN 1
ELSE
SET @fStr = SUBSTRING(@fStr,@i+LEN(@doc),LEN(@fStr))
END
END
RETURN 0
END