[英]SQL Server: Convert IPv6 to INTEGER
我有以下 IPv6 要转换为INT
。
给定:IPv6
DECLARE @IPv6 VARCHAR(MAX) = N'2001:200::'
早些时候,我正在使用以下查询转换 IPv4。
SELECT CONVERT(bigint, PARSENAME(Item,1)) +
CONVERT(bigint, PARSENAME(Item,2)) * 256 +
CONVERT(bigint, PARSENAME(Item,3)) * 65536 +
CONVERT(bigint, PARSENAME(Item,4)) * 16777216 AS IPAddressInt,Item
FROM udf_Split(@IPv6,',')
我对 IPv6 进行了同样的尝试,但出现以下错误。
将数据类型 nvarchar 转换为 bigint 时出错。
尝试使用COALESCE
将零分配给空的 IP 组件。 此外, PARSENAME
旨在用于数据库对象,其组件由点分隔,而不是冒号。 所以,在这里用点替换冒号:
SELECT
CONVERT(bigint, COALESCE(PARSENAME(REPLACE(Item, ':', '.'), 1), 0)) +
CONVERT(bigint, COALESCE(PARSENAME(REPLACE(Item, ':', '.'), 2), 0)) * 256 +
CONVERT(bigint, COALESCE(PARSENAME(REPLACE(Item, ':', '.'), 3), 0)) * 65536 +
CONVERT(bigint, COALESCE(PARSENAME(REPLACE(Item, ':', '.'), 4), 0)) * 16777216 AS IPAddressInt,
Item
FROM udf_Split(@IPv6, ',');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.