SQL点分IP地址转换为二进制
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
/**********************************
* 功能:IP转化为二进制
* 日期:2009-07-27
* 作者:
* 测试:select GetIPBinary('234.0.0.1)
**********************************/
ALTER FUNCTION [dbo].[GetIPBinary](@ip VARCHAR(32))
RETURNS NVARCHAR(32)
AS
BEGIN
DECLARE @ipresult VARCHAR(50) --返回的结果
DECLARE @IPAddress VARCHAR(9) --提取的IP地址
DECLARE @index INT --取得.的索引
DECLARE @yushu VARCHAR(10) --记录余数
DECLARE @Shang INT --除后得到的商
DECLARE @JieGuo VARCHAR(30) --转化后的结果
DECLARE @count INT
SET @count=0
SET @index =PATINDEX('%.%',@ip)-1
SET @ipresult=''
WHILE(@index>0)
BEGIN
SET @IPAddress=SUBSTRING(@ip,1,@index)
SET @JieGuo=''
--转化为8位二进制
IF (CAST(@IPAddress AS INT)=0)
BEGIN
SET @JieGuo='00000000'
END
WHILE(CAST (@IPAddress AS INT)>0)
BEGIN
SET @yushu=@IPAddress%2
SET @Shang=@IPAddress/2
SET @IPAddress=@Shang
SET @jieguo=@yushu+@JieGuo
END
while (LEN(@JieGuo)<>8)
SET @JieGuo='0'+@JieGuo
SET @ipresult=@ipresult +@JieGuo
SET @ip=SUBSTRING(@ip,@index+2,LEN(@ip))
SET @count=@count+1
IF(@count<=2)
SET @index=PATINDEX('%.%',@ip)-1
ELSE
SET @index=LEN(@ip)
END
RETURN @ipresult
END