SQL二进制转换为点分IP
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
/**********************************
* 功能:二进制转换为十进制
* 日期:2009-07-27
* 作者:
* 测试:select GetIPDecimal('11111111')
**********************************/
ALTER FUNCTION [dbo].[GetIPDecimal](@ip VARCHAR(320))
RETURNS NVARCHAR(32)
AS
BEGIN
DECLARE @ipresult VARCHAR(500) --返回的结果
DECLARE @result NVARCHAR(8) --截取的字符
DECLARE @start INT --开始位置
DECLARE @count INT --记录循环的次数
DECLARE @JiShu INT --基数
DECLARE @XinShuJu BIGINT --新数据
DECLARE @result1 INT
SET @count=1
SET @start=1
SET @JiShu=1
SET @XinShuJu=0
SET @ipresult=''
WHILE(@count<=4)
BEGIN
SET @result=SUBSTRING(@ip,@start,8)
--转换为十进制
SET @result1=CONVERT(INT ,@result)
WHILE(@result1>0)
BEGIN
SET @XinShuJu=@XinShuJu+(@result1%10)*@JiShu
SET @result1=@result1/10
SET @JiShu=@JiShu*2
END
SET @start=@count*8+1;
SET @count=@count+1;
SET @ipresult=@ipresult+CONVERT(VARCHAR(8),@XinShuJu);
IF (@count<>5)
SET @ipresult=@ipresult+'.';
SET @XinShuJu=0;
SET @JiShu=1;
END
RETURN @ipresult
END