2012-01-20 5 views
7

Mam tabelę z polem nazwy (varchar), która zawiera tylko ciąg liczbowy i chcę zamówić moje zapytania przez to pole. Ale pola nazw są porządkowane alfabetycznie, ale chcę, żeby były uporządkowane numerycznie. Na przykład, jeśli otrzymam 1 2 200 100 jako wartości pól nazw, To jest zamawiane jak 1 100 2 200 , ale potrzebuję ich 1 2 100 200.Porządkowanie wyniku zapytania za pomocą ciągów liczbowych w django (postgres backend)

Mogę wymyślić następujący wiersz zapytanie

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

Ale nie może reprezentować tego jako zestawów zapytań django orm? Czy istnieje jakiś sposób, aby to zrobić?

Odpowiedz

10

Pytam przede wszystkim, dlaczego masz kolumnę varchar, którą należy traktować jako numeryczną, ale nieważne.

Można użyć metody extra queryset zamienić ciąg:

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

Co by się stało, gdyby jeden lub więcej wartości w kolumnie nie było ważne liczbami całkowitymi, to uciekają się do alfabetycznej zastosować żadnej kolejności lub nie? – sthzg

+2

To by się nie udało na PostgreSQL i byłoby w porządku na MySQL ... Właśnie dowiedziałem się po przejściu z db ... Jeśli ktoś wie, jak to obejść, to byłoby wspaniale! – gabn88

+0

Zainteresowane rozwiązaniem w tym zakresie, mamy kolumnę zawierającą zarówno tekst, jak i liczby całkowite. Kiedy posortowane "10" znajduje się obok "1" zamiast poniżej "9". –

Powiązane problemy