IP地址列的排序

今天在使用自己以前写的程序的时候(内有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

 

你可能感兴趣的