Sample Header Ad - 728x90

Sort varchar by its numeric fields

2 votes
3 answers
2590 views
*I'm sure this has been asked before, but since the question can be formulated in many different ways it's difficult to find the proper answer.* I have an **orders** table with a *varchar* field for the order **number**, which is formatted with 4-digits year, a dash (-), and a progressive numeric value. For example it may contain the following values: `SELECT number FROM orders ORDER BY number LIMIT 10;` number ---------- 1999-13 2019-11 2020-1 2020-10 2020-100 2020-12 2020-2 2020-21 2020-3 2021-1 I need to sort that field by year and then by the progressive number, with this expected result: number ---------- 1999-13 2019-11 2020-1 2020-2 2020-3 2020-10 2020-12 2020-21 2020-100 2021-1 A DB fiddle is here . My questions are: 1) Which is the simplest way to achieve this with an ORDER subclause? 2) How to add an efficient index using this custom sort without having to modify the table? I would like to keep at least the first answer as database-agnostic as possible (that's why I haven't included db specific tags), but if different best answers are possible for different DBMS/versions, let's assume PostgreSQL 12.
Asked by Claudio Floreani (102 rep)
Nov 20, 2020, 12:15 PM
Last activity: Nov 20, 2020, 02:45 PM