博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将 纯真ip数据库|QQ IP数据库 转为SQL,ACCESS
阅读量:7255 次
发布时间:2019-06-29

本文共 3090 字,大约阅读时间需要 10 分钟。

  • 转载自:
最新的珊瑚虫IP数据库
Microsoft Office Access 2003
EiditPlus
MS SQL2005
1.然后打开珊瑚虫IP数据库自带的 ShowIP.exe,选择解压,另存一个TXT文件:
2.用EiditPlus打开这个文本拖动到最后几行,删除多余的东西(千万别试图用默认的文本编辑器打开,内存小的话你会死的很惨):
3.打开Access(为什么不直接到SQL里面导入数据呢?因为会出现文本格式错误,所以先曲线救国吧):
4.选择刚才解压出来的文本文件:
5.按下面操作,不做提示的直接下一步:
7.打开MS
SQL2005,新建一个数据库,名字自己定,以下代码都使用[BasName]代替你新建数据库名称。
8.继续如下操作:
完成执行下面的存储过程:

-- 建立IP转换到十进制方法

USE [BasName]
GO
/****** 对象:  UserDefinedFunction
[dbo].[X16ToDe]    脚本日期: 09/19/2007 13:56:15 ******/
SET ANSI_NULLS
ON
GO
SET QUOTED_IDENTIFIER ON
GO
--
=============================================
-- Author:       
<Author,,Name>
-- Create date: <Create Date, ,>
--
Description:    转换IP为十进制
--
=============================================
Create FUNCTION
[dbo].[X16ToDe]
(
@Old_IP nvarchar(15)
)
RETURNS
numeric
AS
BEGIN
DECLARE
@CharIndex INT,
@CurrPoint
INT,
@SingleValue NVARCHAR(5),
@Cache numeric
SET @CharIndex = 1
SET
@CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex)
SET @SingleValue =
SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex)
SET @Cache =
cast(@SingleValue as numeric)*16777216
SET @CharIndex = @CurrPoint + 1
SET
@CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex)
SET @SingleValue =
SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex)
SET @Cache = @Cache +
cast(@SingleValue as numeric)*65536
SET @CharIndex = @CurrPoint + 1
SET
@CurrPoint = CHARINDEX('.',@Old_IP,@CharIndex)
SET @SingleValue =
SUBSTRING(@Old_IP,@CharIndex,@CurrPoint - @CharIndex)
SET @Cache = @Cache +
cast(@SingleValue as numeric)*256
SET @CharIndex = @CurrPoint + 1
SET
@SingleValue = SUBSTRING(@Old_IP,@CharIndex,len(@Old_IP)- @CharIndex + 1)
SET
@Cache = @Cache + cast(@SingleValue as numeric)
RETURN @Cache;
END

这一步你可以自己按照你的情况来做,我是为了加快数据库索引的速度,所以将IP全部转换为十进制,存到一个新表里面。

-- 建立十进制新表

USE [BasName]
GO
/****** 对象:  Table [dbo].[IP_Real]   
脚本日期: 09/19/2007 14:01:31 ******/
SET ANSI_NULLS ON
GO
SET
QUOTED_IDENTIFIER ON
GO
Create TABLE [dbo].[IP_Real](
[startip]
[numeric](18, 0) NULL,
[endip] [numeric](18, 0) NULL,
[country]
[nvarchar](50) NULL,
[local] [nvarchar](200) NULL
) ON [PRIMARY]

-- 格式化省份

Update [BasName].[dbo].[IP]
SET [country] =
replace([country],N'省',N'省 ')
-- 删除CZ88.NET
Update
[BasName].[dbo].[IP]
SET [country] = replace([country],N'CZ88.NET',N'')
--
将地区提出
Update [BasName].[dbo].[IP]
SET [local] =
SUBSTRING([country],CHARINDEX(' ',[country],1)+1,len([country]))
--
存为国家或省份
Update [BasName].[dbo].[IP]
SET [country] =
SUBSTRING([country],0,CHARINDEX(' ',[country],1))
-- 去处前后导空格
Update
[BasName].[dbo].[IP]
SET [country] = Rtrim(Ltrim([country]))
     
,[local] = Rtrim(Ltrim([local]))
-- 转换IP为十进制,并写入新表
Insert INTO
[BasName].[dbo].[IP_Real]
           ([startip]
          
,[endip]
           ,[country]
           ,[local])
Select
dbo.X16ToDe([startip])
      ,dbo.X16ToDe([endip])
     
,[country]
      ,[local]
FROM [BasName].[dbo].[IP]
order by [startip]
ASC

最后测试一下看看:

-- 测试

DECLARE @IPNumber numeric
set @IPNumber =
dbo.X16ToDe('219.140.31.91')
Select [startip]
      ,[endip]
     
,[country]
      ,[local]
FROM [BasName].[dbo].[IP_Real]
Where
[startip] <= @IPNumber and [endip] >= @IPNumber

注:X16ToDe 转换方法是可以使用的, 但是切割方式不推荐使用 ,纯真版本的很多数据没有规律性

转载于:https://www.cnblogs.com/hejunrex/archive/2011/11/28/2266055.html

你可能感兴趣的文章
node.js
查看>>
Vue 过渡实现轮播图
查看>>
使用npm发布项目
查看>>
关于NodeJS配置HTTPS服务、阿里云申请HTTPS证书
查看>>
Shortest Distance from All Buildings
查看>>
javascript之作用域
查看>>
1.1.linux命令.概要学习
查看>>
Jupyter介绍和使用
查看>>
在2019年,如何成为更好的Node.js开发者?
查看>>
国内云计算厂商众生相:四大阵营十几家企业生存盘点
查看>>
为了云,阿里、腾讯和百度一年花了多少钱?
查看>>
无服务器计算的黑暗面:程序移植没那么容易
查看>>
我在ThoughtWorks中的敏捷实践
查看>>
Universal Windows Platform(UWP)应用的窗口特性
查看>>
最新2018年全球DevOps薪资报告:行业和团队选择指南
查看>>
Visual Studio 15.4发布,新增多平台支持
查看>>
Swift和Objective-C的运行时编程
查看>>
OneAPM挂牌新三板,续写ITOM新篇章
查看>>
KubeEdge:开源的Kubernetes原生边缘计算框架
查看>>
Stefan Tilkov:跳过单体应用,从微服务开始
查看>>