MSSQL 模仿 MYSQL 的IPV4與BIGINT類型互轉函數

/*********************************************/

/****** 自定義函數 [dbo].[INET_ATON] ******/
/****** 將IPV4轉換爲bigint型數字         ******/
/*********************************************/

CREATE FUNCTION [dbo].[INET_ATON](   

@ip NVARCHAR(15)   
)RETURNS BIGINT   
AS   
BEGIN   
DECLARE @iip BIGINT   
SET @iip = 0    
SELECT @iip=@iip+LEFT(@ip, CHARINDEX('.',@ip+'.')-1 )*id, 
  @ip=STUFF(@ip,1,CHARINDEX('.',@ip+'.'),'')  
FROM(   
SELECT id = CONVERT(BIGINT, 1*256*256*256)   
UNION ALL SELECT 1*256*256   
UNION ALL SELECT 1*256   
UNION ALL SELECT 1
) AS T
RETURN (@iip) 

END

---------------------------------------------------------------------------------------

/*********************************************/
/****** 自定義函數 [dbo].[INET_NTOA] ******/
/****** 將bigint型數字IP轉換爲IPV4      ******/

/*********************************************/

CREATE FUNCTION [dbo].[INET_NTOA](
@iip BIGINT   
)
RETURNS NVARCHAR(15)   
As   
BEGIN   
DECLARE @ip NVARCHAR(15)   
SET @ip = ''   
SELECT 
@ip = @ip +'.'+ CONVERT(varchar(3), @iip/ID), @iip = @iip%ID
FROM(   
SELECT ID = CONVERT(BIGINT, 1*256*256*256)   
UNION ALL SELECT 1*256*256   
UNION ALL SELECT 1*256   
UNION ALL SELECT 1 
) AS T   
RETURN(STUFF(@ip,1,1,''))   
END


---------------------------------------------------------------------------------------

;WITH cte AS
(
SELECT dbo.INET_ATON('192.168.1.2') AS iip
)
SELECT dbo.INET_NTOA(iip) AS ip, iip FROM cte

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章