永发信息网

将IP全部转换为十进制,存到另一个新表?MS SQL中

答案:1  悬赏:0  手机版
解决时间 2021-04-30 16:11

程序代码

-- 建立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 电信.四川省遂宁市

代码怎么修改 请大侠指教!!

最佳答案

原IP列为字符串,建议新建两列,以后使用也方便,不然以后还得转换,[NewStartIP]和[NewEndIP]均为BIGINT型


CREATE FUNCTION dbo.IPAddressToInteger (@IP AS VARCHAr(15))RETURNS BIGINTASBEGINRETURN (CONVERT(BIGINT, PARSENAME(@IP,1)) +CONVERT(BIGINT, PARSENAME(@IP,2)) * 256 +CONVERT(BIGINT, PARSENAME(@IP,3)) * 65536 +CONVERT(BIGINT, PARSENAME(@IP,4)) * 16777216)ENDGO
Update [BasName].[dbo].[IP] Set [NewStartIP] = ado.IPAddressToInteger([StartIP]), [NewEndIP] = ado.IPAddressToInteger([EndIP])
DROP FUNCTION dbo.IPAddressToInteger

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
李坑美在什么地方啊,我要过去处理事情
信而富怎么更换银行卡,信而富怎么改银行卡
蔡依林穿的特步是什么型号?
NORM的电影如何下载
描写骏马奔腾的句子
现在有三十头牛,有九个桩,只系单不系双。每
从合肥工业大学翡翠湖校区怎样坐车到中国科技
江苏瑞塘工贸有限公司地址在什么地方,想过去
湖北宜都工程开工需要办理哪些资料
中属最有效的方法是?
我家是vista系统的!太小了,可不和正常的改
和云有关的爱情句子,为什么手机上收到关于鹏
天灾地灾,中国还有多少人?全世界呢?
破鞋 值什么?
初一较好的英语资料
推荐资讯
盗墓笔记结局谁有下载地址
我们的爱还在不在?
1986.1.27害时出生算算她的生成八字
达芙妮靴子温州市区哪里有卖
晚上可以洗头吗?
QQ个人中心怎么多出个连接?
星星密室地址在什么地方,想过去办事
穿越火线怎么下载不了,手机版穿越火线体验服
《数码宝贝交错战争》多长时间更新一集?
霍州有宏基专卖店么
请问现在3g无线网络目前覆盖多少个城镇了?那
欧洲标志性的动物是什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?