--如果是字符串的转换,可以简单的用下面的方法:--将十六进制字符串转换为数字
create proc h2d
@str varchar(20), --要转换的字符串
@re bigint output --转换结果
as
declare @sql nvarchar(400),@r varbinary(10)
set @sql='set @r='+case left(@str,2) when '0x' then '' else '0x' end+@str
exec sp_executesql @sql,N'@r varbinary(10) out',@r out
set @re=cast(@r as bigint)
go--调用示例
declare @re bigint
exec h2d 'e5',@re out
select 结果=@rego
drop proc h2d
create proc h2d
@str varchar(20), --要转换的字符串
@re bigint output --转换结果
as
declare @sql nvarchar(400),@r varbinary(10)
set @sql='set @r='+case left(@str,2) when '0x' then '' else '0x' end+@str
exec sp_executesql @sql,N'@r varbinary(10) out',@r out
set @re=cast(@r as bigint)
go--调用示例
declare @re bigint
exec h2d 'e5',@re out
select 结果=@rego
drop proc h2d
set @a=0x10
select cast(@a as int)
比如我的这个表示十六进制的数据的类型为nvarchar的字段名为data1
那我
select *
from table1
where convert(int,data1)>1
这样写的时候,报错,说是
“将nvarchar 值 '1BH' 转换为数据类型为 int 的列时发生语法错误。”
这可怎么办啊?
怎么把这个转换出来的nvarchar型的数据与另外一个十进制字段进行比较呢?
returns int
as
begin
declare @b int
select @a=replace(@a,'0x',''),@b=0
while len(@a)<>''
begin
select @b=@b*16+case left(@a,1) when 'A' then 10
when 'B' then 11
when 'C' then 12
when 'D' then 13
when 'E' then 14
when 'F' then 15
else left(@a,1)
end
set @a=right(@a,len(@a)-1)
end
return @b
end
----------------------------------------------------------select *
from table1
where dob.fun(data1)>1
from table1
where dbo.fun(data1)>1