2

テーブルに 16 進値の列があります。そのテーブルのすべての値に 16 進値を追加したいと考えています。単純な int の場合、次のように実行します。

UPDATE myTable
SET num = num + 4000

単純に 16 進数演算を使用してこれを行う方法はありますか? または、列の値を 10 進数に変換し、追加する値を 10 進数に変換し、それらを追加してから、値を 16 進数に戻す必要がありますか? (もしそうなら、それを行う最も簡単な方法は何ですか?)

(注: 現在、SQL Server 2000 を使用しています。)

4

3 に答える 3

4

次のようなものを使用します:

print convert(varbinary(4),0 + 0x002E + 0x001D)

次のような結果が得られるはずです。

0x0000004B

方程式のゼロは、すべての数値を信じるように欺くので、値を計算します。

于 2012-10-22T18:31:14.953 に答える
1

これが実際には 16 進数の文字列表現であると仮定するとnum、いくつかのユーザー定義関数を使用して整数に変換できると思います。

-- Based on Feodor's solution on
-- http://blog.sqlauthority.com/2010/02/01/sql-server-question-how-to-convert-hex-to-decimal/
CREATE FUNCTION fn_HexToInt(@str varchar(16))
RETURNS BIGINT AS BEGIN

SELECT @str=upper(@str)
DECLARE @i int, @len int, @char char(1), @output bigint
SELECT @len=len(@str),@i=@len, @output=case  WHEN @len>0 THEN 0 END

WHILE (@i>0)
BEGIN
    SELECT @char=substring(@str,@i,1)
         , @output=@output
                    +(ASCII(@char)
                        -(case when @char between 'A' and 'F' then 55
                          else case when @char between '0' and '9' then 48 end
                          end))
                                *power(16.,@len-@i)
        ,  @i=@i-1
END
RETURN @output
END

-- Example conversion back to hex string - not very tested
CREATE FUNCTION fn_IntToHex(@num int)
    RETURNS VARCHAR(16) AS BEGIN
    DECLARE @output varchar(16), @rem int
    SELECT @output = '', @rem=0
    WHILE (@num > 0)
    BEGIN   
        SELECT @rem = @num % 16
        SELECT @num = @num / 16
        SELECT @output = char(@rem + case when @rem between 0 and 9 then 48 else 55 end) + @output 
    END
    RETURN @output
END

select dbo.fn_HexToInt ('7FFF') -- = 32767
select dbo.fn_IntToHex(32767) -- = 7FFF

だからあなたは試すことができます

UPDATE myTable
SET num = dbo.fn_IntToHex(dbo.fn_HexToInt(num) + 4000)
于 2012-09-03T15:51:33.583 に答える
0

プレフィックスを使用できます0x

Select 0x3F + 2

65を返します

それで

UPDATE myTable 
SET num = num + 0x4000 

(これはSQL2008で機能します-SQL2000以降の新機能かどうかはわかりません-教えてください!)

2つの0x値がある場合、それらは+演算子によって連結されるため、convertを使用してそれらの1つをintに変換します

于 2012-09-03T07:59:38.457 に答える