按数字排序,带字母的数字,然后是字母 PostgresQL

Posted

技术标签:

【中文标题】按数字排序,带字母的数字,然后是字母 PostgresQL【英文标题】:Order by Number, Number with Letters, and then Letters PostgresQL 【发布时间】:2022-01-19 23:59:27 【问题描述】:

有没有办法让 PostgresQL 语句获取特定列中的所有数据,并可以按数字、带字母的数字和字母的顺序对它们进行排序?我最大的问题之一是我在数字和字母数字值中也有特殊字符,这使得排序变得更加困难。

这是我正在处理的数据示例

EL-300-A
EL-580
J-38125
Nick
Nick1.0
javier
test
test1
test32
test2121AgainOn4/28
test12345
test123467 againOn4/28
test123467
test123467 again

有人知道在 PostgresQL 中构建 Order By 语句的最佳方法吗?

【问题讨论】:

定义“数字”和“带字母的数字”。 数字是带小数的整数,数字和字母是整数和 varchars 的混合组成一个字符串 【参考方案1】:

数据库不支持使用order by 命令的这种机会。但是,你可以用其他方法来做到这一点。例如:

select 
    "name", 
    regexp_replace("name", '[\d]',  '', 'g') as only_letters, 
    regexp_replace("name", '[^\.\d]', '', 'g') as only_numbers 
from examples.term
order by only_letters, only_numbers

在这个查询中,我首先只提取字母和数字作为附加字段。然后使用这些字段排序。

【讨论】:

您不必选择值:order by regexp_replace("name", '[\d]', '', 'g'), regexp_replace("name", '[^\.\d]', '', 'g')

以上是关于按数字排序,带字母的数字,然后是字母 PostgresQL的主要内容,如果未能解决你的问题,请参考以下文章

首先按字母顺序对对象数组进行排序,然后按数字排序

按数字(最高优先)然后按字母(字母顺序)对对象集合进行排序

php 按字母顺序排序数组然后按数字排序

Pandas str 按字母顺序然后按数字

排序数组字母数字Swift3

JAVA排序数字字母混合