ORACLE:对包含数字的字符串字段进行排序



我想按升序显示页码。但是,由于字段 PAGE 是字符串数据类型,正常的"ORDER BY"考虑 10 <2。我必须将字段 PAGE 设置为字符串,因为可以有像"3-4"这样的输入。谁能建议一条出路。我附上了屏幕截图以供参考。

请帮忙。截图

select id
    ,F_NL
    ,page
    ,title
from newsletter_content
where F_NL = '29'
order by page asc;
select page from p 
  order by to_number(nvl(substr(page, 1, instr(page, '-')-1), page))

Rextester 演示

您可以检查是否存在-字符并提取前面的数字:

ORDER BY CASE
           WHEN INSTR( page, '-' ) > 0
           THEN TO_NUMBER( SUBSTR( page, 1, INSTR( page, '-' ) - 1 ) )
           ELSE TO_NUMBER( page )
         END;

最新更新