如何在postgresql中按数字和字母数字项排序

如何在postgresql中按数字和字母数字项排序,postgresql,sorting,sql-order-by,numeric,alphanumeric,Postgresql,Sorting,Sql Order By,Numeric,Alphanumeric,我想对包含数字和字母数字项的列表进行排序,如下所示: SELECT colname FROM tablename ORDER BY colname::bytea; 皮耶萨1 0001 皮耶萨20 参考文献30 234 参考文献2 FDGSDFG 皮耶萨3 参考文献0004 参考文献2005 这就是我想要留下来的方式: 0001 234 FDGSDFG 皮耶萨1 皮耶萨3 皮耶萨20 参考文献0004 参考文献2 参考文献30 参考文献2005 但是,当我使用“order by”子句时,

我想对包含数字和字母数字项的列表进行排序,如下所示:

SELECT colname
FROM tablename
ORDER BY colname::bytea;
  • 皮耶萨1
  • 0001
  • 皮耶萨20
  • 参考文献30
  • 234
  • 参考文献2
  • FDGSDFG
  • 皮耶萨3
  • 参考文献0004
  • 参考文献2005
这就是我想要留下来的方式:

  • 0001
  • 234
  • FDGSDFG
  • 皮耶萨1
  • 皮耶萨3
  • 皮耶萨20
  • 参考文献0004
  • 参考文献2
  • 参考文献30
  • 参考文献2005
但是,当我使用“order by”子句时,排序如下所示:

SELECT colname
FROM tablename
ORDER BY colname::bytea;
  • 0001
  • 234
  • FDGSDFG
  • 皮耶萨1
  • PIEZA20
  • 皮耶萨3
  • 参考文献0004
  • 参考文献2
  • REF2005
  • 参考文献3
这种顺序是因为句子检测到一个字符串列表,字符串的自然排序按字母顺序排列


我不知道如何用字符串分隔数字进行排序,第一个是数字,第二个是字母数字顺序?尝试使用
按长度排序(列),列


事实上,这只是一个简短的版本,并不总是像预期的那样工作。如果您想要真正的自然排序,请使用以下命令:

您可以尝试将字母数字列转换为数据类型,并尝试如下操作:

SELECT colname
FROM tablename
ORDER BY colname::bytea;

你能给我发个重复的问题吗?我发现了很多问题,但没有一个可以尝试此解决方案。我找到了它,但返回了显示的第三个列表