IP地址在SQL SERVER中的排序方法
YMind | 2010-06-28 03:36:59 | 1098 点击 | 3 评论 | IP地址SQL SERVER排序PARSENAME

颜铭注:这里我删除掉老外的废话,直接用代码演示。

本文最重要的是使用了函数PARSENAME,关于PARSENAME函数的详细介绍请参考:http://msdn.microsoft.com/zh-cn/express/ms188006.aspx

一、创建测试表并添加测试数据:

  1. CREATE TABLE [WorkStation] ( [IPAddress]  VARCHAR(15) )  
  2.  
  3. INSERT INTO [WorkStation] ( [IPAddress] ) VALUES ('255.255.0.0')  
  4. INSERT INTO [WorkStation] ( [IPAddress] ) VALUES ('98.123.251.21')  
  5. INSERT INTO [WorkStation] ( [IPAddress] ) VALUES ('192.120.40.243')  
  6. INSERT INTO [WorkStation] ( [IPAddress] ) VALUES ('207.46.199.60')  
  7. INSERT INTO [WorkStation] ( [IPAddress] ) VALUES ('10.0.0.1')  
  8. INSERT INTO [WorkStation] ( [IPAddress] ) VALUES ('68.142.197.0')  
  9. INSERT INTO [WorkStation] ( [IPAddress] ) VALUES ('255.255.255.255')  
  10. INSERT INTO [WorkStation] ( [IPAddress] ) VALUES ('65.54.152.142')  
  11. INSERT INTO [WorkStation] ( [IPAddress] ) VALUES ('64.233.188.15')  
  12. INSERT INTO [WorkStation] ( [IPAddress] ) VALUES ('65.97.176.172')  

二、一般的查询方法以及查询结果:

  1. SELECT [IPAddress] FROM [WorkStation]  
  2. ORDER BY [IPAddress] 

结果如下:

  1. IPAddress         
  2. ---------------   
  3. 10.0.0.1  
  4. 192.120.40.243  
  5. 207.46.199.60  
  6. 255.255.0.0  
  7. 255.255.255.255  
  8. 64.233.188.15  
  9. 65.54.152.142  
  10. 65.97.176.172  
  11. 68.142.197.0  
  12. 98.123.251.21 

三、更改后的语句:

  1. SELECT [IPAddress] FROM [WorkStation]  
  2. ORDER BY CAST(PARSENAME([IPAddress], 4) AS INT),  
  3.          CAST(PARSENAME([IPAddress], 3) AS INT),  
  4.          CAST(PARSENAME([IPAddress], 2) AS INT),  
  5.          CAST(PARSENAME([IPAddress], 1) AS INT

四、新的查询结果:

  1. IPAddress         
  2. ---------------   
  3. 10.0.0.1  
  4. 64.233.188.15  
  5. 65.54.152.142  
  6. 65.97.176.172  
  7. 68.142.197.0  
  8. 98.123.251.21  
  9. 192.120.40.243  
  10. 207.46.199.60  
  11. 255.255.0.0  
  12. 255.255.255.255 
此文章由 YMind 于 2010-06-28 03:45:02 编辑
引用通告:http://www.ymind.net/Article/86/Trackback.ashx

评论列表

  1. Gravatar
    2010-06-28 09:37:03 | # | 回复
    为啥不先转换成bigINT格式呢?这样效率高点
  2. Gravatar
    YMind
    2010-06-28 11:23:50 | # | 回复
    两种方式没有测试过,不过这里的目的可能是想演示如何使用PARSENAME函数吧
  3. Gravatar
    fejerry
    2010-11-30 10:07:24 | # | 回复
    PARSENAME 微软当初不知想到这点了没 ,

    就算没有,也可以写个自定义函数
(必填)
(必填,不会被公开)