如何排序在表中存储为varchar的IP地址,我正在尝试对记录进行排序,如果我按ORDER BY column_name asc排序。我得到排序后的值,但我不知道这是否是对存储为varchar的IP地址进行排序的正确方法。
因此,请建议我上述方法是否正确,请建议我可以这样做。
数据库:Oracle
谢谢
如何排序在表中存储为varchar的IP地址,我正在尝试对记录进行排序,如果我按ORDER BY column_name asc排序。
您正在按字符串而不是数字排序。
您可以将IP地址存储到4个不同的NUMBER列中。现在,您只有一列IP地址,并且所有4个字段都放在了一起,剩下的是带分隔符的字符串操作。
您可以通过两种方式做到这一点:
1. SUBSTR和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
/
由于REGEXP是CPU密集型操作,因此简单的SUBSTR方法会更快一些。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句