用数字按字母顺序对列进行排序

Sorting Column alphabetically with numbers

我有 table 列 :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"

如何实现?

你试过了吗:

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

只是一个猜测,但可能有用...祝你好运!

这似乎有效

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

你可以看看这个:MySQL 'Order By' - sorting alphanumeric correctly

感谢@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)

此解决方案在 ruby 上 rails:

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

这就是我需要的!