2016-05-12 89 views
0

給定一個表具有以下IP地址TSQL轉換地址列表CIDR標記

IPAddress 
----------- 
192.168.1.1 
192.168.1.2 
192.168.1.3 
192.168.1.4 
192.168.1.5 
192.168.1.6 
192.168.1.7 
192.168.1.8 

我找下面的輸出

Output 
--------------- 
192.168.1.0/29 
192.168.1.8/32 

我來最接近的是與這個:

SELECT SUBSTRING(IPAddress, 1, LEN(IPAddress) - CHARINDEX('.',REVERSE(IPAddress))), COUNT(*) 
FROM IP 
GROUP BY SUBSTRING(IPAddress, 1, LEN(IPAddress) - CHARINDEX('.',REVERSE(IPAddress))) 

但是,只有我的子網和地址#。不知道如何採取下一步。

+0

我來最接近的是這個 SELECT SUBSTRING(ip地址,1,LEN(ip地址)CHARINDEX(,REVERSE(ip地址) )), COUNT(*) FROM IP GROUP BY SUBSTRING(ip地址,1,LEN(ip地址) - '' CHARINDEX(,REVERSE(ip地址))) – bitvector

+0

但只得到我的地址的子網和# 。不確定如何採取下一步 – bitvector

+0

你能否以簡單的英語解釋你想要的輸出內容?恐怕,這並不是顯而易見的。 –

回答

0

您需要使用子網掩碼才能知道符號的正確數量的主機位。

這會給你CIDR: - ''

DECLARE @IPADDRESS VARCHAR(15) = '192.168.1.1' 
     ,@NETMASK VARCHAR(15) = '255.255.255.0' 
     ,@NETWORKBITS VARCHAR(3) 

SET @NETWORKBITS = 
    CASE 
     WHEN @NETMASK = '255.0.0.0' THEN '8' 
     WHEN @NETMASK = '255.128.0.0' THEN '9' 
     WHEN @NETMASK = '255.192.0.0' THEN '10' 
     WHEN @NETMASK = '255.224.0.0' THEN '11' 
     WHEN @NETMASK = '255.240.0.0' THEN '12' 
     WHEN @NETMASK = '255.248.0.0' THEN '13' 
     WHEN @NETMASK = '255.252.0.0' THEN '14' 
     WHEN @NETMASK = '255.254.0.0' THEN '15' 
     WHEN @NETMASK = '255.255.0.0' THEN '16' 
     WHEN @NETMASK = '255.255.128.0' THEN '17' 
     WHEN @NETMASK = '255.255.192.0' THEN '18' 
     WHEN @NETMASK = '255.255.224.0' THEN '19' 
     WHEN @NETMASK = '255.255.240.0' THEN '20' 
     WHEN @NETMASK = '255.255.248.0' THEN '21' 
     WHEN @NETMASK = '255.255.252.0' THEN '22' 
     WHEN @NETMASK = '255.255.254.0' THEN '23' 
     WHEN @NETMASK = '255.255.255.0' THEN '24' 
     WHEN @NETMASK = '255.255.255.128' THEN '25' 
     WHEN @NETMASK = '255.255.255.192' THEN '26' 
     WHEN @NETMASK = '255.255.255.224' THEN '27' 
     WHEN @NETMASK = '255.255.255.240' THEN '28' 
     WHEN @NETMASK = '255.255.255.248' THEN '29' 
     WHEN @NETMASK = '255.255.255.252' THEN '30' 
     WHEN @NETMASK = '255.255.255.254' THEN '31' 
     WHEN @NETMASK = '255.255.255.255' THEN '32' 
    END 
PRINT @IPADDRESS + '/' @NETWORKBITS 
+0

@bitvector請告訴你是否有子網掩碼,如果你想要一個功能,所以我可以給你一個更好的答案。如果你沒有子網掩碼,這是不可能的。 – Tizechie

+0

嗨Tizechie,我擁有的唯一數據是IP地址。我很欣賞網絡面具的功能,但似乎沒有一個好方法來實現我的目標。 – bitvector

+0

@bitvector,在你的問題中,當你說你想輸出192.168.1.0/29這只是簡短的手192.168.1.0 255.255.255.248。也許你不是在問正確的問題?我很樂意爲您解決問題,但您需要修改您的問題。 – Tizechie