珊瑚虫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分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq