我的MS SQL 2012数据库服务器上有以下表:
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的国家信息。因此,我需要一些比较者来找到正确的行。我看到以下办法:
2.2.10.2小于2.2.2.2)还有其他方法来比较使用MS的两个字符串IP吗?
发布于 2014-06-21 19:08:48
如果您可以以“零填充”格式存储字符串,那么只需使用字符串就可以完成所需的任务。所以,5.200.100.0将是005.200.100.000。然后直接字符串比较就可以了,查询可以利用索引。
在使用IP时,我几乎总是使用内部格式(32位或128位)以及字符串表示形式。真正需要内部格式来防止比较错误。
如果性能不是问题,则可以将字符串窗体转换为二进制窗体或字符窗体。为此,parsename()可能非常有用(参见这里)。通常,在使用IP时,性能是一个问题,因此您应该寻找一种更有效地存储数据的方法。
https://stackoverflow.com/questions/24344905
复制相似问题