sql - 创建一个包含来自子网列的 IP 地址的列

标签 sql subnet

我在 SQL 数据库中有两列:SubnetID , SubnetName
例子:

 SubnetID  SubnetName

 1         1.2.3.0/24
 2         1.2.4.0/14
 3         1.2.5.4/30
 ...
 ...

使用 SQL 代码,我需要为每个现有行(子网 ID、子网名称)添加另一列“IP 地址”。

输出:
SubnetID  SubnetName   IP Address
 1         1.2.3.0/24   1.2.3.0
 1         1.2.3.0/24   1.2.3.1
 1         1.2.3.0/24   1.2.3.2
 ...       ...          ... and so on (till .24)
 1         1.2.3.0/24   1.2.3.24
 2         1.2.4.0/14   1.2.4.0  
 2         1.2.4.0/14   1.2.4.1 
 2         1.2.4.0/14   1.2.4.2
 ...       ...          ... and so on (till .14)
 2         1.2.4.0/14   1.2.4.14  
 3         1.2.5.4/30   1.2.5.4
 3         1.2.5.4/30   1.2.5.5
 3         1.2.5.4/30   1.2.5.6
 ...       ...          ... and so on (till .30)
 3         1.2.5.4/30   1.2.5.30
 ... etc.

所以基本上前两列需要保持原样,但附加列将具有覆盖 (.x/x) 范围的单独地址。

非常感谢您的任何建议。

最佳答案

如果我正确理解您的问题,与其在表中添加新列,不如创建另一个如下所示的表:

SubnetID  IPAddress
-------------------    
   1       1.2.3.0
   1       1.2.3.1
   1       1.2.3.2
  ...        ...
   2       1.2.4.0
  ...        ...
   3       1.2.5.4

您的原始表格保持原样:
SubnetID  SubnetName
---------------------
   1      1.2.3.0/24
   2      1.2.4.0/14
   3      1.2.5.4/30
  ...        ...

在我看来,这比你想做的要好,因为现在我们不会复制所有 SubnetName值,我们现在可以避免冗余和所谓的 update anomaly .

例如在您提出的示例中,如果您想更改 SubnetName 会发生什么情况id 2来自 1.2.4.0/141.2.4.0/15 ?您必须更改每一行 - 但使用这种方式,您只需更改一次。

关于sql - 创建一个包含来自子网列的 IP 地址的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51513170/

相关文章:

azure - 虚拟网络 'GatewaySubnet' 中缺少引用 'MyNetwork' 的子网

mysql - MemSQL - 在创建表时同时将代理键作为主键和不同的唯一键

mysql - 如何选择一个查询中的列不在另一查询的列之间的记录?

go - 在golang中将网络掩码号转换为32位

同一 VNET 上的 AZURE VM 无法 ping 通 3389 以外的端口

java - 如何在Java中从IP获取子网

SQL 将 varchar 列转换为 float

sql varchar(max) 与 varchar(fix)

GridView 中的 C# HTML 标签

c# - IP 地址是否与本地计算机在同一子网上(支持 IPv6)