有这样一个字符串(中,国,中,人民,国,现代工业化进程,国)
处理过之后变成(中,国,人民,现代工业化进程)
以下是我的方法,有什么不对的地方还请各位指点
------------------删除重复的字符
declare
@v1 nvarchar
(100)
declare
@v2 nvarchar
(100)
declare
@v3 nvarchar
(100)
declare
@split nvarchar
(100)
--N',,,,,中,国,中,人民,,,,,国,现代工业化进程,国,,,'
set
@v1=N', ,, ,,中,国,中,人民, ,, , ,国,现代工业化进程,国, ,,'
set
@v3=''
set
@split=','
/*
@v1 :存储临时字符串
@v2 :获取两个分隔符中的字符串
@v3 :存储最后没有重复的字符串
*/
if
left(@v1,1)<>@split
set
@v1=@split+@v1
if
right(@v1,1)<>@split
set
@v1=@v1+@split
while
len(@v1)>len(@split)*2
begin
set
@v2=substring
(@v1,len( @split),charindex
( @split,@v1,len
( @split)+1))
if
len(@v2)>len
(@split)*2
begin
set
@v2=right
(@v2,len(@v2)-1);
if
ltrim
(rtrim
(@v2))<>@split
set
@v3=@v3+ltrim
(rtrim
(@v2));
set
@v1= replace
(@v1,@v2,'')
end
else
--如果有连续的分割符,删除.
set
@v1=stuff
(@v1,len
(@split)+1,len
(@split),'')
end
set
@v3=ltrim
(rtrim
(@v3))
while
(left(@v3,1)=',')
set
@v3=ltrim
(rtrim
(right(@v3,len
(@v3)-1)))
while
(right(@v3,1)=',')
set
@v3=ltrim
(rtrim
(left
(@v3,len
(@v3)-1)))
select
@v3
-------------------提取中文
declare
@v1 nvarchar(100)
set
@v1=N'ab呀吖3d%华e座//f456'
while
patindex
('%[A-Z,0-9,%]%',@v1)>0
begin
-- set @v2=isnull(@v2,'')+substring(@v1,patindex('%[0-9]%',@v1),1);
set
@v1=stuff
(@v1,patindex
('%[A-Z,0-9,%,/]%',@v1),1,'')
end
select
@v1
-------------------提取字母,数字
declare
@v1 nvarchar
(100)
set
@v1=N'ab呀吖3d%华e座//f456'
while
patindex
('%[^A-Z]%',@v1)>0
begin
-- set @v2=isnull(@v2,'')+substring(@v1,patindex('%[0-9]%',@v1),1);
set
@v1=stuff
(@v1,patindex
('%[^A-Z]%',@v1),1,'')
end
select
@v1
-------过滤重复字符
declare
@v1 nvarchar
(100)
declare
@v2 nvarchar
(100)
--N',,,,,中国中人民国现代工业化进程国,,,'
set
@v1=N',,,,,中国中人民国现代工业化进程国,,,'
while
len
(@v1)>0
begin
set
@v2=isnull
(@v2,'')+left
(@v1,1)
set
@v1=replace
(@v1,left
(@v1,1),'')
end
select
@v2