首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对存储在Oracle中的IP地址进行排序

问如何对存储在Oracle中的IP地址进行排序
EN

Stack Overflow用户
提问于 2015-03-12 05:30:58
回答 1查看 708关注 0票数 1

如何对存储在表中的IP地址进行排序,我试图对记录进行排序,如果我使用column_name asc进行排序的话。我得到排序的值,但我不知道这是否是正确的方式来排序存储为varchar的IP地址。

因此,恳求建议我,如果上述方法是好的,或如果它是错误的,恳求建议的方式,这样做。

DB : Oracle

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-12 05:42:05

如何对存储在表中的IP地址进行排序,我试图对记录进行排序,如果我使用column_name asc进行排序的话。

您正在按字符串而不是number进行排序。

您可以将IP地址存储到4不同的数字列中。现在,在所有4个字段中都有一个IP地址列后,就剩下了分隔字符串操作。

你可以用两种方式来做:

1.超级研究院和TO_NUMBER

例如,

代码语言:javascript
复制
SELECT IP
FROM table_name
ORDER BY to_number(SUBSTR(IP,1,instr(IP,'.')-1)) ,
  to_number(SUBSTR(IP,instr(IP,'.')         +1, instr(IP,'.',1,2) - instr(IP,'.') - 1)),
  to_number(SUBSTR(IP,instr(IP,'.',1,2)     +1, instr(IP,'.',1,3) - instr(IP,'.',1,2) - 1)),
  to_number(SUBSTR(IP,instr(IP,'.',1,3)     +1))
/

2. REGEXP_SUBSTR和TO_NUMBER

例如,

代码语言:javascript
复制
SELECT IP
FROM table_name
ORDER BY TO_NUMBER (REGEXP_SUBSTR (IP, '[[:digit:]]+', 1, 1)) ASC ,
  TO_NUMBER (REGEXP_SUBSTR (IP, '[[:digit:]]+', 1, 2)) ASC ,
  TO_NUMBER (REGEXP_SUBSTR (IP, '[[:digit:]]+', 1, 3)) ASC ,
  TO_NUMBER (REGEXP_SUBSTR (IP, '[[:digit:]]+', 1, 4)) ASC 
/

简单的SUBSTR方法会更快一些,因为REGEXP是CPU密集型操作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29002519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档