我的表格列为: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"
如何实现这一目标?
答案 0 :(得分:3)
这似乎有效
Item.order("LENGTH(name)", :name).pluck(:name)
答案 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)
这就是我需要的东西!