功能:提取字符串中的数字,全角数字转化为半角数字输出
入口:字符串
出口:数字
作者:余墨
时间: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')
浙公网安备 33010602011771号