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

编程入门 行业动态 更新时间:2024-10-25 18:29:11

<a href=https://www.elefans.com/category/jswz/34/1673694.html style=珊瑚虫IP数据库转 SQL 2005 纯真IP转sql"/>

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

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

首先需要准备:

  • 最新的珊瑚虫IP数据库 .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

转载于:.html

更多推荐

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

本文发布于:2024-02-05 08:09:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1673695.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:珊瑚虫   纯真   数据库   SQL   IP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!