博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

提取字符串中的数字,全角数字转化为半角数字输出

Posted on 2006-11-08 09:00  余墨  阅读(279)  评论(0)    收藏  举报

功能:提取字符串中的数字,全角数字转化为半角数字输出
入口:字符串
出口:数字
作者:余墨
时间:2006.10

create function dbo.f_GetNumeric
(
    @strValue as varchar(800)
)
returns  varchar(800)  as 
begin

     declare @Result as varchar(800),
                 @Temp as varchar(2),
                 @i as int,
    @flag as int,
    @varbin as int
 
     Set @Result=''
     if  Len(@strValue)<=0
     begin
          return '空'
     end
  set @i=1
  while @i<=Len(@strValue)
  begin
 
  set  @Temp=Substring(@strValue,@i,1)
  If ascII(@Temp)<=57 and ascII(@Temp)>=48
                     --判断是不是0—9数字,而IsNumeric()函数的实际作用是判断参数表达式是否是数值,
                     --而这个所谓的“数值”不仅仅包含普通的数字
    begin           
   set @Result=@Result+@Temp
   set @flag=0
    end
  else
  begin
   set @varbin=cast(cast(@Temp as varbinary) as int)

   if @varbin<=41913 and @varbin>=41904
                     --判断是不是全角的0-9,全角0-9转换为varbinary再转换为int后值为41904-41913
   begin
   set @varbin=@varbin-41856
                     --转换为半角,半角0-9的ascII值为48-57
   set @Result=@Result+char(@varbin)
   set @flag=0
   end
   else
   if @flag=0
  begin
   set @Result=@Result+'-'
   set @flag=1
  end 
 end
 set @i=@i+1
 end
 if right(@Result,1)='-'
 begin
 set @Result=left(@Result,len(@Result) -1)
 end 
 return @Result
end
go

select dbo.f_GetNumeric('--2;;:@~~`#4%,25.25┆┟^&25,14//|/+  .....#!~·¥`~%……—!*()——发+-=、|‘“:;个*()_=+|\3ad---45d--s34.9。9..点8个8')