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