会社の先輩に言われ、テストデータ作成用に作ったもの。
もったいないので公開しておく。
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までぐらいしか変換できぬのです。
後日、修正したものを再投稿します。