【问题标题】:Ordering query result by numeric strings in django (postgres backend)在 django(postgres 后端)中按数字字符串排序查询结果
【发布时间】:2012-02-15 01:13:34
【问题描述】:

我有一个表,其名称 (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);

但不能将其表示为 django orm 查询集?有什么办法吗?

【问题讨论】:

    标签: python django postgresql orm


    【解决方案1】:

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

    您可以使用extra queryset 方法来转换您的字符串:

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

    【讨论】:

    • 如果列中的一个或多个值不是有效整数会发生什么,它会诉诸字母顺序,不应用顺序还是失败?
    • 它会在 PostgreSQL 上失败,但在 MySQL 上会很好......我从 db 转换后才发现......如果有人知道如何规避它,那就太好了!
    • 对此解决方案感兴趣,我们有一个包含文本和整数的列。排序时,“10”位于“1”旁边,而不是“9”下方。
    猜你喜欢
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2015-12-08
    • 2017-07-25
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    相关资源
    最近更新 更多