日期:2014-05-18 浏览次数:20708 次
create table tb(col varchar(20))
insert into tb values('ATO14')
insert into tb values('ATT14W1')
insert into tb values('AYE10B')
insert into tb values('AYH010B2H')
insert into tb values('AC11')
insert into tb values('AC115')
insert into tb values('AC115HC')
insert into tb values('AYCH245HIP')
go
create function dbo.f_str(@col varchar(50)) returns varchar(50)
as
begin
  declare @str varchar(50)
  set @str = ''
  declare @i as int
  set @i = 1
  declare @j as int
  set @j = len(@col)
  declare @k as int
  set @k = 0
  declare @l as int
  set @k = 0
  while @i <= @j
  begin
    if substring(@col , @i , 1) between '0' and '9'
    begin
       if @i = @j
       begin
          set @str = @str + substring(@col , @l , @i - @l + 1)
          break
       end
       if @k = 0 
       begin
          set @k = 1
          set @l = @i
       end
    end
    else
    begin
       if @k = 0
          set @str = @str + substring(@col , @i , 1)
       else
          begin
          set @str = @str + substring(@col , @l , @i - @l)
          break
          end
    end
    set @i = @i + 1
  end
  return @str
end
go
--调用函数
select col , new_col = dbo.f_str(col) from tb
drop function dbo.f_str
drop table tb
/*
col                  new_col                                            
-------------------- -------------------------------------------------- 
ATO14                ATO14
ATT14W1              ATT14
AYE10B               AYE10
AYH010B2H            AYH010
AC11                 AC11
AC115                AC115
AC115HC              AC115
AYCH245HIP           AYCH245
(所影响的行数为 8 行)
*/
------解决方案--------------------