按数字排序,带字母的数字,然后是字母 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的主要内容,如果未能解决你的问题,请参考以下文章