我想按升序显示页码。但是,由于字段 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;