IP数字,数字IP

DECLARE @ip VARCHAR(60)='113.118.138.159'
DECLARE @ip_int BIGINT=[dbo].[f_IP2Int](@ip)

SELECT [IPstart], [IPend], [M1], [M2], [M3], [M4]
FROM [master].[dbo].[ipv]
WHERE ipstart < @ip_int
  AND [IPend] > @ip_int
GO

SET STATISTICS IO ON
SET STATISTICS TIME  ON

CREATE CLUSTERED INDEX ix_action ON [ipv](ipstart,[IPend])

select   dbo.f_IP2Int('113.118.138.159')  
select   dbo.f_IP2Int('12.168.0.1')  
--*/  
CREATE   FUNCTION   [dbo].[f_IP2Int](  
@ip   char(15)  
)RETURNS   bigint  
AS  
BEGIN  
DECLARE   @re   bigint  
SET   @re=0  
SELECT   @re=@re+LEFT(@ip,CHARINDEX('.',@ip+'.')-1)*ID  
,@ip=STUFF(@ip,1,CHARINDEX('.',@ip+'.'),'')  
FROM(  
SELECT   ID=CAST(16777216   as   bigint)  
UNION   ALL   SELECT   65536  
UNION   ALL   SELECT   256  
UNION   ALL   SELECT   1)A  
RETURN(@re)  
END

/**//*--数字   IP   转换成格式化   IP   地址  
   
--邹建   2004.08(引用请保留此信息)--*/  
   
/**//*--调用示例  
   
select   dbo.f_Int2IP(3232235531)  
select   dbo.f_Int2IP(212336641)  
*/  
CREATE   FUNCTION   [dbo].[f_Int2IP](  
@IP   bigint  
)RETURNS   varchar(15)  
AS  
BEGIN  
DECLARE   @re   varchar(15)  
SET   @re=''  
SELECT   @re=@re+'.'+CAST(@IP/ID   as   varchar)  
,@IP=@IP%ID  
from(  
SELECT   ID=CAST(16777216   as   bigint)  
UNION   ALL   SELECT   65536  
UNION   ALL   SELECT   256  
UNION   ALL   SELECT   1)a  
RETURN(STUFF(@re,1,1,''))  
END 

原文地址:https://www.cnblogs.com/qanholas/p/3183548.html