相关疑难解决方法(0)

用于在SQL Server中存储ip地址的数据类型

我应该选择什么数据类型在SQL Server中存储IP地址?

通过选择正确的数据类型,可以很容易地按IP地址进行过滤吗?

t-sql sql-server types sql-server-2005 ip-address

106
推荐指数
7
解决办法
9万
查看次数

给定子网范围和IP列表,选择IP介于其间的所有行

我正在为数据库中的网络的各个方面建模.我们正在处理的一个更烦人的问题是创建子网范围,然后确定给定的IP集合是否在这些范围内.我们当前的模型通过以下列说明了IPv4和IPv6之间的差异:

[subnet_sk]      [int] IDENTITY(1,1) NOT NULL,
[ipv6_network]   [char](39)          NULL,
[ipv6_broadcast] [char](39)          NULL,
[ipv4_network]   [char](15)          NULL,
[ipv4_broadcast] [char](15)          NULL,
[network_type]   [char](4)           NOT NULL
Run Code Online (Sandbox Code Playgroud)

上面的模式做了一些重要的假设,这些假设很重要.我们正在利用完全扩展的IP(192.168.001.001vs. 192.168.1.1)进行存储和比较.我们做出这个决定是因为围绕在SQL服务器中以数字方式存储IPv6地址的问题(bigints是无符号的,这意味着我们必须使用六列来表示IPv6).

给定此表模式,可以很容易地编写一个select语句来确定任一类型的IP是否在表中的范围之间:

select *
  from subnet
 where '1234:0000:0000:0000:fc12:00ab:0042:1050'
       between ipv6_network
           and ipv6_broadcast

-- or alternatively for IPv4

select *
  from subnet
 where '192.168.005.015'
       between ipv4_network
           and ipv4_broadcast
Run Code Online (Sandbox Code Playgroud)

更为困难的是,IP列表确定哪些IP位于子网范围之间.IP列表将由用户输入提供,存储在数据库中.显然,对于存储在数据库中的数据,我可以进行类似的连接,如下例所示.

例如,用户可以提供1234:0000:0000:0000:fc12:00ab:0042:1050,192.168.001.001192.168.1.1.我提出的唯一解决方案是使用表值函数来拆分 IP 列表并使用以下之间执行连接:

-- this only covers the IPv4 addresses from the …
Run Code Online (Sandbox Code Playgroud)

sql sql-server ipv4 ipv6

9
推荐指数
1
解决办法
3587
查看次数

在TSQL中对IP地址进行排序

我需要将我的IP列表排序.问题是我希望它们在第一部分中的值之后排序,然后在第二部分中排序,依此类推.

MYTABLE

DATA
20.1.2.1
100.1.1.1
20.1.10.1
80.8.8.8
Run Code Online (Sandbox Code Playgroud)

此代码不对IP进行正确排序

SELECT * FROM MYTABLE ORDER BY DATA
Run Code Online (Sandbox Code Playgroud)

我希望得到这样的东西:

20.1.2.1
20.1.10.1
80.8.8.8
100.1.1.1
Run Code Online (Sandbox Code Playgroud)

谁能帮我 ?

t-sql sorting

2
推荐指数
1
解决办法
1824
查看次数

标签 统计

sql-server ×2

t-sql ×2

ip-address ×1

ipv4 ×1

ipv6 ×1

sorting ×1

sql ×1

sql-server-2005 ×1

types ×1