在django(postgres后端)中按数字字符串排序查询结果

yil*_*yin 7 python django postgresql orm

我有一个名称(varchar)字段的表,只保存数字字符串,我想通过此字段对我的查询进行排序.但名称字段按字母顺序排序,但我希望它们按数字顺序排序.例如,如果我得到1 2 200 100作为名称字段值,它的订购量就像1 100 2 200但我需要它们是1 2 100 200.

我能够提出以下行查询

select *
from my_table as t
where t.foo='bar'
order by cast(t.name as integer);
Run Code Online (Sandbox Code Playgroud)

但是不能把它表示为django orm查询集吗?有没有办法做到这一点?

Dan*_*man 10

我首先要问的是为什么你有一个varchar列需要被视为数字,但没关系.

您可以使用extraqueryset方法转换字符串:

MyTable.objects.extra(select={'int_name': 'CAST(t.name AS INTEGER)'},
                      order_by=['int_name'])
Run Code Online (Sandbox Code Playgroud)

  • 它会在PostgreSQL上失败并且在MySQL上很好......我刚从db转换后发现......如果有人知道如何规避它,那就太棒了! (3认同)