SQL 字符串拆分

本文介绍了一种使用 SQL Server 进行字符串处理的方法,包括如何删除字符串中的重复字符及提取纯中文字符,适用于数据库管理和数据清洗任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       有这样一个字符串(中,国,中,人民,国,现代工业化进程,国)

处理过之后变成(中,国,人民,现代工业化进程)

 

        以下是我的方法,有什么不对的地方还请各位指点

 ------------------删除重复的字符

 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值