2012-01-20 4 views
7

У меня есть таблица с полем имени (varchar), которая поддерживает только числовую строку, и я хочу заказать мои запросы в этом поле. Но поля имени упорядочиваются в алфавитном порядке, но я хочу, чтобы они упорядочивались численно. Например, если я получаю 1 2 200 100 в качестве имени поля значения, оно заказывается как 1 100 2 200 , но мне нужно, чтобы они были 1 2 100 200.Заказ результата запроса по числовым строкам в django (postgres backend)

я мог бы быть в состоянии придумать следующий ряд запрос

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

Но не может представлять это как запрос орфографии орфографии? есть ли способ сделать это?

ответ

10

Я бы спросил, прежде всего, почему у вас есть столбец varchar, который нужно рассматривать как числовое, но неважно.

Вы можете использовать метод extra QuerySet, чтобы преобразовать строку:

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

Что произойдет, если одно или несколько значений в столбце не было действительных чисел, будет ли прибегать к алфавитной, не применять никакого порядка или не? – sthzg

+2

Это не получится на PostgreSQL и будет в порядке на MySQL ... Я только что узнал после перехода с db ... Если кто-то знает, как обойти это, это было бы здорово! – gabn88

+0

Заинтересованы в решении для этого, у нас есть столбец с текстом и целыми числами. Когда сортировка «10» находится рядом с «1» вместо «9». –

Смежные вопросы