繁体   English   中英

SQL 服务器:将 IPv6 转换为 INTEGER

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM