従来の 4 ビット 16 進数はかなり直接的です。Hex String to Integer (値が FHexString というフィールドに格納されていると仮定) :
CONVERT(BIGINT,CONVERT(varbinary(4),
(SELECT master.dbo.fn_cdc_hexstrtobin(
LEFT(FMEID_ESN,8)
))
))
整数から 16 進文字列 (値が FInteger というフィールドに格納されていると仮定):
(SELECT master.dbo.fn_varbintohexstr(CONVERT(varbinary,CONVERT(int,
FInteger
))))
注意すべき重要な点は、特に Intel マシンでレジスタ共有を引き起こすビット サイズを使用し始めると、Intel のリトル エンディアンの性質により、レジスタの High と Low および Left と Right が入れ替わることです。たとえば、varbinary(3) を使用する場合、6 文字の Hex について話しています。この場合、ビットは右から左に「54、32、10」のインデックスとしてペアになっています。intel システムでは、「76,54,32,10」が必要です。8 つのうち 6 つしか使用していないため、交換は自分で行う必要があります。「76,54」が左、「32,10」が右となります。コンマは高値と安値を区切ります。インテルは高値と安値を交換し、次に左と右を交換します。つまり、変換を行うには...ため息、たとえば、自分で交換する必要があります。
(SELECT master.dbo.fn_replvarbintoint(
CONVERT(varbinary(3),(SELECT master.dbo.fn_cdc_hexstrtobin(
--intel processors, registers are switched, so reverse them
----second half
RIGHT(FHex8,2)+ --0,1 (0 indexed)
LEFT(RIGHT(FHex8,4),2)+ -- 2,3 (oindex)
--first half
LEFT(RIGHT(FHex8,6),2) --4,5
)))
))
少し複雑なので、8 文字の 16 進数 (varbinary(4)) への変換を維持しようとします。
要約すると、これはあなたの質問に答えるはずです。総合的に。