按字母顺序对数字排序

时间:2018-01-31 13:26:44

标签: ruby-on-rails postgresql activerecord psql

我的表格列为:name。 我想按字母顺序排序:name

使用Item.order(:name)并获取"item 14", "item 15", "item 16", "item 3", "item 4"。但我想要"item 3", "item 4", "item 14", "item 15", "item 16"

如何实现这一目标?

3 个答案:

答案 0 :(得分:3)

这似乎有效

Item.order("LENGTH(name)", :name).pluck(:name)

您可以查看:MySQL 'Order By' - sorting alphanumeric correctly

答案 1 :(得分:0)

你试过了吗?

Item.order('CAST(name AS DECIMAL) ASC')

只是一个猜测,但可以工作......祝你好运!

答案 2 :(得分:0)

感谢@razvans的搜索方向。 我找到了解决方案enter link description here

我有:

 id |   name   
----+----------
  2 | item 2
  3 | item 12 
  1 | item 3
  4 | item 17
  5 | df38
  6 | aaa
  7 | a13v
  8 | a13a
  9 | item 00
(9 rows)

使用此代码:

select name from table_name order by left(name, 1), substring(name, '\d+')::int NULLS FIRST, name;

我得到了:

   name   
----------
 aaa
 a13a
 a13v
 df38
 item 00
 item 2
 item 3
 item 12 
 item 17
(9 rows)

此解决方案在轨道上的红宝石上:

Item.order("left(name, 1), substring(name, '\\d+')::int NULLS FIRST, name").pluck(:name)

这就是我需要的东西!