私はSQL2005を使用しています。ゼロの複数の連続したセクションを処理できるように、誰かがこのステートメントを変更するのを手伝ってくれることを望んでいます。このステートメントは、IPv6アドレスをバイナリに変換します。
次のIPv6アドレスがあるとします:2001:db8:85a3:0000:0000:8a2e:370:7334。
2001:db8:85a3 :: 8a2e:370:7334と書き直して、ゼロの連続するセクションを取り除くことができます。
ただし、以下のSQLステートメントは、完全な表記で2001:db8:85a3:0000:0000:8a2e:370:7334と記述されている場合にのみ、上記のIPv6アドレスを処理できるため、バイナリ結果は0x20010DB885A3000000008A2E03707334になります。
2001:db8:85a3 :: 8a2e:370:7334として記述されたIPv6アドレスを処理できるように、以下のステートメントをどのように変更できますか?または::1のようなアドレスでさえ?
DECLARE @ipstr VARCHAR(50)
SET @ipstr = '2001:db8:85a3::0000:8a2e:370:7334'
SELECT CAST('' AS XML).value('xs:hexBinary( sql:column("y.ips") )', 'varbinary(16)')
FROM (
SELECT ips = (
SELECT RIGHT('0000' + SUBSTRING(ips, NUMBER, CHARINDEX(':', ips, NUMBER) - NUMBER), 4)
FROM master.dbo.spt_values
,(SELECT ips = ':' + @ipstr + ':') x
WHERE TYPE = 'P'
AND NUMBER BETWEEN 2 AND LEN(ips)
AND SUBSTRING(ips, NUMBER-1, 1) = ':'
FOR XML PATH('')
)
) y