会社の先輩に言われ、テストデータ作成用に作ったもの。
もったいないので公開しておく。
DECLARE @input_value varchar(20) = 'FFFF'
DECLARE @value varchar(20) = UPPER(REVERSE(@input_value))
DECLARE @index int = 0
DECLARE @ans decimal(21, 0) = 0
DECLARE @COUNT int = 1
DECLARE @S varchar(1) = '1'
DECLARE @N int = 1
WHILE (@COUNT < 16)
BEGIN
IF (@COUNT = 1) SET @S = '1'
ELSE IF (@COUNT = 2) SET @S = '2'
ELSE IF (@COUNT = 3) SET @S = '3'
ELSE IF (@COUNT = 4) SET @S = '4'
ELSE IF (@COUNT = 5) SET @S = '5'
ELSE IF (@COUNT = 6) SET @S = '6'
ELSE IF (@COUNT = 7) SET @S = '7'
ELSE IF (@COUNT = 8) SET @S = '8'
ELSE IF (@COUNT = 9) SET @S = '9'
ELSE IF (@COUNT = 10) SET @S = 'A'
ELSE IF (@COUNT = 11) SET @S = 'B'
ELSE IF (@COUNT = 12) SET @S = 'C'
ELSE IF (@COUNT = 13) SET @S = 'D'
ELSE IF (@COUNT = 14) SET @S = 'E'
ELSE IF (@COUNT = 15) SET @S = 'F'
SET @index = CHARINDEX(@S, @value)
WHILE (@index > 0)
BEGIN
SET @ans += @COUNT * POWER(16, @index - 1)
SET @index = CHARINDEX(@S, @value, @index + 1)
END
SET @COUNT += 1
END
--Answer
SELECT
@ans AS [ANSWER]
これ、GUIDとか32桁の16進数を数値に変換させようと思ったら、算術オーバーフローがでましたわ。
返信削除すいません。
改めて検証したら、FFFFFFFFまでぐらいしか変換できぬのです。
後日、修正したものを再投稿します。