【问题标题】:Order by Number, Number with Letters, and then Letters PostgresQL按数字排序,带字母的数字,然后是字母 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 的混合组成一个字符串

标签: sql postgresql sorting sql-order-by


【解决方案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')
猜你喜欢
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
相关资源
最近更新 更多