快速將珊瑚蟲IP數(shù)據(jù)庫轉(zhuǎn)MS SQL2005的圖文教程第2/2頁
-- 建立IP轉(zhuǎn)換到十進(jìn)制方法
USE [BasName]
GO
/****** 對(duì)象: 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: 轉(zhuǎn)換IP為十進(jìn)制
-- =============================================
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
-- 建立十進(jìn)制新表
USE [BasName]
GO
/****** 對(duì)象: 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]
這一步你可以自己按照你的情況來做,我是為了加快數(shù)據(jù)庫索引的速度,所以將IP全部轉(zhuǎn)換為十進(jìn)制,存到一個(gè)新表里面。
-- 格式化省份
Update [BasName].[dbo].[IP]
SET [country] = replace([country],N'省',N'省 ')
-- 刪除CZ88.NET
Update [BasName].[dbo].[IP]
SET [country] = replace([country],N'CZ88.NET',N'')
-- 將地區(qū)提出
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))
-- 去處前后導(dǎo)空格
Update [BasName].[dbo].[IP]
SET [country] = Rtrim(Ltrim([country]))
,[local] = Rtrim(Ltrim([local]))
-- 轉(zhuǎn)換IP為十進(jìn)制,并寫入新表
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
最后測(cè)試一下看看:
程序代碼
-- 測(cè)試
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
基本所有的轉(zhuǎn)換最多3分鐘完成,比自己寫應(yīng)用程序轉(zhuǎn)換要快的多。
相關(guān)文章
收縮數(shù)據(jù)庫日志文件的方法(僅適用于mssql2005)
將數(shù)據(jù)庫日志文件變?yōu)?M大小代碼講解收縮mssql2005數(shù)據(jù)庫日志文件的方法,感興趣的你可不要錯(cuò)過了哈,希望本文可以幫助到你2013-02-02
SQL 2005 ERROR:3145 解決辦法(備份集中的數(shù)據(jù)庫備份與現(xiàn)有的數(shù)據(jù)庫不同)
在圖形界面中,選擇備份文件,設(shè)置覆蓋原有數(shù)據(jù)庫,指定現(xiàn)數(shù)據(jù)庫文件所在的位置,選擇錯(cuò)誤回滾,點(diǎn)擊確定2013-01-01
簡(jiǎn)單有用的SQL腳本 (行列互轉(zhuǎn),查詢一個(gè)表內(nèi)相同紀(jì)錄等)
本文推薦的SQL腳本都是很實(shí)用的哦,學(xué)會(huì)了,對(duì)在工作中得心應(yīng)手,一起來學(xué)習(xí)學(xué)習(xí)吧。2010-04-04
PowerDesigner中如何導(dǎo)入SQL Server數(shù)據(jù)庫
這篇文章向我們介紹了如何導(dǎo)入SQL Server數(shù)據(jù)庫到PowerDesigner中的詳細(xì)步驟說明,并附帶圖片介紹,需要了解的朋友可以參考下2015-07-07
SQL2005Express中導(dǎo)入ACCESS數(shù)據(jù)庫的兩種方法
這篇文章主要介紹了SQL2005Express中導(dǎo)入ACCESS數(shù)據(jù)庫的方法,需要的朋友可以參考下2014-09-09
Sql Server 2005中查詢用分隔符分割的內(nèi)容中是否包含其中一個(gè)內(nèi)容
Sql Server 2005中查詢用分隔符分割的內(nèi)容中是否包含其中一個(gè)內(nèi)容,多個(gè)朋友給予的參考。2011-10-10
在WIN7下安裝和配置SQL Server 2005 Express Edition(精簡(jiǎn)版)
這篇文章主要介紹了在WIN7下安裝和配置SQL Server 2005 Express Edition(精簡(jiǎn)版),需要的朋友可以參考下2015-01-01
SQLServer 查詢當(dāng)前服務(wù)器有多少連接請(qǐng)求的語句
有時(shí)DBA需要檢查當(dāng)前服務(wù)器有多少連接請(qǐng)求,以及連接請(qǐng)求的登錄名,客戶端版本,主機(jī)名,程序名等等之類的信息,我們就可以對(duì)服務(wù)器的連接狀況有所了解,防止不明用戶使用。2011-08-08

