今天在使用自己以前写的程序的时候(内有IP地址列的排序),看着IP的排序,怎么看怎么别扭,琢磨怎么能够象数字一样排序? 下面是解决方案,实现方法就是把IP地址 按照 “.” 分成四组数字,然后再排序!
功能是实现了,不过比较繁琐不知还有什么简单的方法!?
SELECT PublicIp, LEFT(PublicIp, CASE WHEN CHARINDEX('.', PublicIp)
<= 0 THEN 0 ELSE CHARINDEX('.', PublicIp) - 1 END) AS ip1,
LEFT(STUFF(PublicIp, 1, CHARINDEX('.', PublicIp),''), CASE WHEN CHARINDEX('.', STUFF(PublicIp, 1, CHARINDEX('.', PublicIp),''))
<= 0 THEN 0 ELSE CHARINDEX('.', STUFF(PublicIp, 1, CHARINDEX('.', PublicIp),'')) - 1 END) AS ip2,
LEFT(STUFF(STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), ''), 1, CHARINDEX('.', STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), '')), ''), CASE WHEN CHARINDEX('.', STUFF(STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), ''), 1, CHARINDEX('.', STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), '')), '')) <= 0 THEN 0 ELSE CHARINDEX('.', STUFF(STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), ''), 1, CHARINDEX('.', STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), '')), '')) - 1 END) AS ip3,
CASE WHEN (STUFF(STUFF(STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), ''), 1, CHARINDEX('.', STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), '')), ''), 1, CHARINDEX('.', STUFF(STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), ''), 1, CHARINDEX('.', STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), '')), '')), '')= NULL) then 0 else cast(STUFF(STUFF(STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), ''), 1, CHARINDEX('.', STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), '')), ''), 1, CHARINDEX('.', STUFF(STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), ''), 1, CHARINDEX('.', STUFF(PublicIp, 1, CHARINDEX('.', PublicIp), '')), '')), '') as int) end AS ip4
FROM ServerInfo order by ip1 ,ip2, ip3 ,ip4
本文介绍了一种将IP地址转换为数字进行排序的方法。通过将IP地址按“.”分割成四部分,并分别转换为整数,可以实现IP地址的正确排序。此方法适用于需要对大量IP地址进行快速排序的应用场景。
4228

被折叠的 条评论
为什么被折叠?



