📅  最后修改于: 2023-12-03 15:25:54.293000             🧑  作者: Mango
当我们需要按照数字排序时,通常会使用数字类型来完成。但是,例如我们需要按数字中最高位数进行排序,就需要用到Postgres的一些函数。
left(string, n)
返回字符串中的前n个字符。
SELECT LEFT('12345', 2); -- 返回 '12'
to_char(number, 'format')
将数字类型转换成指定格式的字符串。
SELECT to_char(12345, '99999'); -- 返回 '12345'
substring(string, from, to)
返回字符串从from位置开始到to位置之间的子串。
SELECT SUBSTRING('12345' FROM 1 FOR 2); -- 返回 '12'
假设我们有以下数字列表需要按最高数字排序:
123
56
27
89
7889
1234
我们需要按首位数字进行排序,得到的结果为:
123
1234
27
56
7889
89
我们可以使用left()和to_char()函数来完成。
SELECT *
FROM numbers
ORDER BY to_char(left(number::text,1)::integer, '999') DESC, number;
上述代码中,左边的表达式将数字转换成字符串并获取首位数字,然后转换回数字类型,并指定格式为'999'以确保输出的字符串长度一致。右边的表达式用于排序整个数字。
要注意的是,我们需要将数字列强制转换为文本类型以便使用left()函数。
最终的排序结果是按照首位数字降序排列,次要排序规则是数字大小。