You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于SQL Server 2019从IP地址与子网掩码计算子网

计算IP子网的SQL Server解决方案

要基于IP地址和子网掩码计算对应的子网,核心逻辑是将点分十进制的IP和掩码转换为整数后执行按位与运算,再将结果转回点分十进制格式。以下是针对SQL Server 2019的具体实现:

1. 创建IP转换函数

首先需要两个自定义函数,用于在点分十进制IP和整数之间转换:

IP转整数函数

CREATE FUNCTION dbo.IPToInt (@IP VARCHAR(15))
RETURNS INT
AS
BEGIN
    DECLARE @Octet1 INT, @Octet2 INT, @Octet3 INT, @Octet4 INT
    SELECT 
        @Octet1 = PARSENAME(@IP, 4),
        @Octet2 = PARSENAME(@IP, 3),
        @Octet3 = PARSENAME(@IP, 2),
        @Octet4 = PARSENAME(@IP, 1)
    
    RETURN (@Octet1 * 16777216) + (@Octet2 * 65536) + (@Octet3 * 256) + @Octet4
END

整数转IP函数

CREATE FUNCTION dbo.IntToIP (@IPInt INT)
RETURNS VARCHAR(15)
AS
BEGIN
    RETURN 
        CAST((@IPInt / 16777216) AS VARCHAR) + '.' +
        CAST(((@IPInt % 16777216) / 65536) AS VARCHAR) + '.' +
        CAST(((@IPInt % 65536) / 256) AS VARCHAR) + '.' +
        CAST((@IPInt % 256) AS VARCHAR)
END

2. 计算子网的查询语句

利用上述函数,直接在查询中计算子网列:

SELECT
    ComputerName,
    IP,
    SubnetMask,
    dbo.IntToIP(dbo.IPToInt(IP) & dbo.IPToInt(SubnetMask)) AS Subnet
FROM
    IPsource

说明

  • PARSENAME函数用于拆分点分十进制字符串,按从右到左的顺序提取每个网段(octet)
  • 按位与运算&会保留IP地址中与子网掩码为1的位对应的部分,即子网地址
  • 该方案支持任意子网掩码(如255.255.252.0、255.255.192.0等),无需针对特定掩码做适配

内容的提问来源于stack exchange,提问作者Cyclone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:48:24