📜  按最高数字排序 postgres (1)

📅  最后修改于: 2023-12-03 15:25:54.293000             🧑  作者: Mango

按最高数字排序 Postgres

当我们需要按照数字排序时,通常会使用数字类型来完成。但是,例如我们需要按数字中最高位数进行排序,就需要用到Postgres的一些函数。

函数介绍
left()

left(string, n)

返回字符串中的前n个字符。

SELECT LEFT('12345', 2); -- 返回 '12'
to_char()

to_char(number, 'format')

将数字类型转换成指定格式的字符串。

SELECT to_char(12345, '99999'); -- 返回 '12345'
substring()

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()函数。

最终的排序结果是按照首位数字降序排列,次要排序规则是数字大小。

参考资料