珊瑚虫IP数据库转 SQL 2005 纯真IP转sql

2023-11-29 09:40

本文主要是介绍珊瑚虫IP数据库转 SQL 2005 纯真IP转sql,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在幻想曲BLOG上看到不少朋友说,最近服务器上的IP数据好像不是很准确,于是重新做了一个新的,不少朋友可能需要这个数据库,因为文件太大的缘故,所以直接提供快速转换方法。

首先需要准备:

  • 最新的珊瑚虫IP数据库 http://update.cz88.net/soft/qqwry.rar
  • 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

转载于:https://www.cnblogs.com/DavidLc/archive/2008/04/05/1138676.html

这篇关于珊瑚虫IP数据库转 SQL 2005 纯真IP转sql的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/432339

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分