首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较MS 2012中IP地址的两种字符串表示

比较MS 2012中IP地址的两种字符串表示
EN

Stack Overflow用户
提问于 2014-06-21 19:02:49
回答 1查看 234关注 0票数 0

我的MS SQL 2012数据库服务器上有以下表:

代码语言:javascript
复制
CREATE TABLE ip_lookup (
ip_start varchar(16) NOT NULL, // like 5.200.100.0
ip_end varchar(16) NOT NULL,   // like 5.202.255.255
country char(2) NULL,
PRIMARY KEY CLUSTERED (ip_start));

我不能改变这个表的结构,因为它经常更新-每2-3天更新一次。

鉴于上表所示,我需要获得特定IP的国家信息。因此,我需要一些比较者来找到正确的行。我看到以下办法:

  • 将ip_start和ip_end存储为未签名的int32,然后比较它们很容易。(对我来说不是一个选项,因为我不能更改表模式)
  • 将每个IP拆分为四个八进制(也应该是整数,因为字符串按字母顺序比较,2.2.10.2小于2.2.2.2)

还有其他方法来比较使用MS的两个字符串IP吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-21 19:08:48

如果您可以以“零填充”格式存储字符串,那么只需使用字符串就可以完成所需的任务。所以,5.200.100.0将是005.200.100.000。然后直接字符串比较就可以了,查询可以利用索引。

在使用IP时,我几乎总是使用内部格式(32位或128位)以及字符串表示形式。真正需要内部格式来防止比较错误。

如果性能不是问题,则可以将字符串窗体转换为二进制窗体或字符窗体。为此,parsename()可能非常有用(参见这里)。通常,在使用IP时,性能是一个问题,因此您应该寻找一种更有效地存储数据的方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24344905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档