SQL数字IP与格式化IP转换
SQL数字IP与格式化IP相互转换,里面有调用的事例。
原作者里面有一个错误,现在已经改掉了,希望能帮到有需要的人。
1 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_IP2Int]') and xtype in (N'FN', N'IF', N'TF'))
2 drop function [dbo].[f_IP2Int]
3 GO
4
5 /**//*--字符型 IP 地址转换成数字 IP
6
7 --邹建 2004.08(引用请保留此信息)--*/
8
9 /**//*--调用示例
10 select Len('192.168.100.110')
11 select dbo.f_IP2Int('192.168.100.110')
12 select dbo.f_IP2Int('12.168.0.1')
13 --*/
14 CREATE FUNCTION f_IP2Int(
15 @ip char(15)
16 )RETURNS bigint
17 AS
18 BEGIN
19 DECLARE @re bigint
20 SET @re=0
21 SELECT @re=@re+LEFT(@ip,CHARINDEX('.',@ip+'.')-1)*ID
22 ,@ip=STUFF(@ip,1,CHARINDEX('.',@ip+'.'),'')
23 FROM(
24 SELECT ID=CAST(16777216 as bigint)
25 UNION ALL SELECT 65536
26 UNION ALL SELECT 256
27 UNION ALL SELECT 1)A
28 RETURN(@re)
29 END
30 GO
31
32
33
34 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_Int2IP]') and xtype in (N'FN', N'IF', N'TF'))
35 drop function [dbo].[f_Int2IP]
36 GO
37
38 /**//*--数字 IP 转换成格式化 IP 地址
39
40 --邹建 2004.08(引用请保留此信息)--*/
41
42 /**//*--调用示例
43
44 select dbo.f_Int2IP(3738334565)
45 select dbo.f_Int2IP(212336641)
46 --*/
47 CREATE FUNCTION f_Int2IP(
48 @IP bigint
49 )RETURNS varchar(15)
50 AS
51 BEGIN
52 DECLARE @re varchar(16)
53 --这里的长度需是16,否则会出错.邹健兄在这里犯了这样的错误。
54 --否则你的IP转换少了一位
55 SET @re=''
56 SELECT @re=@re+'.'+CAST(@IP/ID as varchar)
57 ,@IP=@IP%ID
58 from(
59 SELECT ID=CAST(16777216 as bigint)
60 UNION ALL SELECT 65536
61 UNION ALL SELECT 256
62 UNION ALL SELECT 1)a
63 RETURN(STUFF(@re,1,1,''))
64 END
65 --在这里感谢原作者的尽心奉献。
66