日期:2014-05-17  浏览次数:20642 次

联合查询中。如何把10进制结果自动改为16进制并更新??
abc数据库中

01表   a字段(只允许写入16进制。格式0x1211121等)

02表   b字段(存放10进制的数据)

那么
Update 01 SET a=(select b from 02 where id=1) Where name='aaa'

这样的语句。会直接把查询到02表B段中的数据。写入 01表A段中

我想要的是。查询02表 B段的数据后(如数据是AAAbbb)

然后可有办法。直接转换成16进制。并更新到01表A段中?

------解决方案--------------------
10进制转16进制函数,

create function dbo.Convert10to16
(@x int) returns varchar(1000)
as
begin
 DECLARE @Return varchar(1000),@ind int,@byte binary(1),@byte1 int,@byte2 int,@bin varbinary(1000)
 SELECT @bin=cast(@x as varbinary(4))
 SELECT @Return='',@ind = 1

    WHILE ( @ind <= datalength(@bin) )
    BEGIN
SELECT @byte = substring(@bin, @ind, 1);
        SET @byte1 = @byte / 16
        IF(@byte1 >= 10)
SELECT @Return = @Return + 
CASE @byte1
WHEN 10 THEN 'A'
WHEN 11 THEN 'B'
WHEN 12 THEN 'C'
WHEN 13 THEN 'D'
WHEN 14 THEN 'E'
WHEN 15 THEN 'F'
END
ELSE
SELECT @Return = @Return + convert(char(1),@byte1)

        SET @byte2 = @byte % 16
        IF(@byte2 >= 10)
SELECT @Return = @Return + 
CASE @byte2
WHEN 10 THEN 'A'
WHEN 11 THEN 'B'
WHEN 12 THEN 'C'
WHEN 13 THEN 'D'
WHEN 14 THEN 'E'
WHEN 15 THEN 'F'
END
ELSE
SELECT @Return = @Return + convert(char(1),@byte2)

SELECT @ind = @ind + 1;
    END

  return @Return
end