程序代码
-- 建立IP转换到十进制方法
USE [数据库名]
GO
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
程序代码
-- 建立十进制新表
USE [数据库名]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create TABLE [dbo].[uestc_ipdata](
[pstartip] [numeric](18, 0) NULL,
[pendip] [numeric](18, 0) NULL,
[paddress1] [nvarchar](50) NULL,
[paddress2] [nvarchar](200) NULL
) ON [PRIMARY]
这一步你可以自己按照你的情况来做,我是为了加快数据库索引的速度,所以将IP全部转换为十进制,存到一个新表里面。
程序代码
-- 格式化省份
Update [数据库名].[dbo].[IP]
SET [paddress1] = replace([paddress1],N'省',N'省 ')
-- 删除CZ88.NET
Update [数据库名].[dbo].[IP]
SET [paddress1] = replace([paddress1],N'CZ88.NET',N'')
-- 将地区提出
Update [数据库名].[dbo].[IP]
SET [paddress2] = SUBSTRINg([paddress1],CHARINDEX(' ',[paddress1],1)+1,len([paddress1]))
-- 存为国家或省份
Update [数据库名].[dbo].[IP]
SET [paddress1] = SUBSTRINg([paddress1],0,CHARINDEX(' ',[paddress1],1))
-- 去处前后导空格
Update [数据库名].[dbo].[IP]
SET [paddress1] = Rtrim(Ltrim([paddress1]))
,[paddress2] = Rtrim(Ltrim([paddress2]))
-- 转换IP为十进制,并写入新表
Insert INTO [数据库名].[dbo].[uestc_ipdata]
([pstartip]
,[pendip]
,[paddress1]
,[paddress2])
Select dbo.X16ToDe([pstartip])
,dbo.X16ToDe([pendip])
,[paddress1]
,[paddress2]
FROM [数据库名].[dbo].[IP]
order by [pstartip] ASC
最后测试一下看看:
程序代码
-- 测试
DECLARE @IPNumber numeric
set @IPNumber = dbo.X16ToDe('219.140.31.91')
Select [pstartip]
,[pendip]
,[paddress1]
,[paddress2]
FROM [数据库名].[dbo].[uestc_ipdata]
Where [pstartip] <= @IPNumber and [pendip] >= @IPNumber
以上是原先执行命令代码 怎么修改可以把新建的表里修改成
以下操作
1,-- 将地区提出
修改为不提出
2,-- 存为国家或省份 如:四川省
修改为国家省份地区详细显示 。。如:四川省内江市资中县 电信ADSL 这样的显示或者原表里的这个地方的地址数据不操作只把ip数据修改成十进制显示就好
原表是下面的式样
221.237.213.0 221.237.216.255 四川省 电信
221.237.217.0 221.237.217.255 四川省眉山市 电信
221.237.218.0 221.237.221.255 四川省 电信
221.237.222.0 221.237.222.255 四川省遂宁市 电信
221.237.223.0 221.237.225.255 四川省 电信
221.237.226.0 221.237.226.255 四川省遂宁市 电信
修改成新原表是下面的式样十进制ip
xxxxxxxxxx xxxxxxxxx 电信.四川省遂宁市
xxxxxxxxxx xxxxxxxxx 电信.四川省
xxxxxxxxxx xxxxxxxxx 电信.四川省遂宁市
代码怎么修改 请大侠指教!!