我需要获取一个IP列中所有不同子网的计数,并按MS SQL上的子网进行分组.ie ..计算所有子网为192.168.0,192.168.1,10.10.10的ips等等.
任何帮助表示赞赏.谢谢
这不是超级高效的,但假设地址存储在名为varchar的列中IPAddress
,您可以执行以下操作:
SELECT SUBSTRING(IPAddress, 1, LEN(IPAddress) - CHARINDEX('.',REVERSE(IPAddress))), COUNT(*) FROM ... GROUP BY SUBSTRING(IPAddress, 1, LEN(IPAddress) - CHARINDEX('.',REVERSE(IPAddress)))
这还没有经过测试,所以我可能会在一个地方离开或错过一个括号.
基本的想法是,你想通过找到最后一个点来切断最后一个点,并找到最后一个点,而不是反转字符串并找到第一个点,这CHARINDEX
将非常容易.要将"第一个点"位置转换回原始字符串中的"最后一个点"位置,请从原始长度中减去该位置.
(如果我的假设是错误的并且它没有存储为文本,除非您同时提供数据类型,否则您不太可能得到有意义的答案.)