我相信这以前也有人问过,但由于这个问题可以用许多不同的方式来表述,所以很难找到正确的答案。
我有一个带有varchar字段的orders表,它是用4位数的年份、一个破折号(-)和一个累进的数值来格式化的。例如,它可能包含以下值:
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我需要按年份对该字段进行排序,然后按照累进的数字对该字段进行排序,并取得预期结果:
number
----------
1999-13
2019-11
2020-1
2020-2
2020-3
2020-10
2020-12
2020-21
2020-100
2021-1我的问题是:
我希望至少保持第一个答案与数据库无关(这就是为什么我没有包含特定于db的标记),但是如果不同的DBMS/版本可能有不同的最佳答案,那么让我们假设PostgreSQL 12。
发布于 2020-11-20 12:56:44
我会将该值转换为整数数组,然后对该数组进行排序:
SELECT number
FROM orders
ORDER BY string_to_array(number, '-')::int[]
LIMIT 10;发布于 2020-11-20 14:45:18
我有一个带有varchar字段的订单表.一年..。达什..。累进数值
对不起,但我认为这是将多个信息存储在一个数据库字段中的典型案例--这是一个糟糕的想法。
我见过的大多数订单表都只是使用单个数字字段来唯一地标识订单,并将订单日期作为一个单独的字段,如果需要的话,可以从该字段派生年份。
https://dba.stackexchange.com/questions/280030
复制相似问题