--如果是字符串的转换,可以简单的用下面的方法:--将十六进制字符串转换为数字
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

解决方案 »

  1.   

    如果你的十六制是指binary字段存储的,就可以直接用:declare @a varbinary(10)
    set @a=0x10
    select cast(@a as int)
      

  2.   

    不行啊,
    比如我的这个表示十六进制的数据的类型为nvarchar的字段名为data1
    那我
    select *
    from table1
    where convert(int,data1)>1
    这样写的时候,报错,说是
    “将nvarchar 值 '1BH' 转换为数据类型为 int 的列时发生语法错误。”
    这可怎么办啊?
      

  3.   

    另外,写到存储过程里的话,
    怎么把这个转换出来的nvarchar型的数据与另外一个十进制字段进行比较呢?
      

  4.   

    create function fun(@a nvarchar(100))
    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
      

  5.   

    select *
    from table1
    where dbo.fun(data1)>1