如何对存储在表中的IP地址进行排序,我试图对记录进行排序,如果我使用column_name asc进行排序的话。我得到排序的值,但我不知道这是否是正确的方式来排序存储为varchar的IP地址。
因此,恳求建议我,如果上述方法是好的,或如果它是错误的,恳求建议的方式,这样做。
DB : Oracle
谢谢
发布于 2015-03-12 05:42:05
如何对存储在表中的IP地址进行排序,我试图对记录进行排序,如果我使用column_name asc进行排序的话。
您正在按字符串而不是number进行排序。
您可以将IP地址存储到4不同的数字列中。现在,在所有4个字段中都有一个IP地址列后,就剩下了分隔字符串操作。
你可以用两种方式来做:
1.超级研究院和TO_NUMBER
例如,
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
例如,
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密集型操作。
https://stackoverflow.com/questions/29002519
复制相似问题