2012-01-20 9 views
7

Ho una tabella con un campo nome (varchar) che contiene solo stringhe numeriche e desidero ordinare le mie query in questo campo. Ma i campi dei nomi sono ordinati in ordine alfabetico, ma voglio che vengano ordinati numericamente. Ad esempio se ottengo 1 2 200 100 come campi nome valori, si ordina come 1 100 200 2 ma devo loro di essere 1 2 100 200.Ordinamento del risultato della query mediante stringhe numeriche in django (backend postgres)

ho potuto essere in grado di elaborare seguente riga query

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

Ma non è possibile rappresentarlo come django orm querysets? c'è un modo per farlo?

risposta

10

Chiederei innanzitutto perché si dispone di una colonna varchar che deve essere considerata numerica, ma non importa.

È possibile utilizzare il metodo extra set di query per convertire la stringa:

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

cosa accadrebbe se uno o più valori nella colonna c'erano numeri interi validi, sarebbe ricorrere ad alfabetico, applicare nessun ordine o fallire? – sthzg

+2

Fallirebbe su PostgreSQL e andrebbe bene su MySQL ... Ho appena scoperto dopo la transizione da db ... Se qualcuno sa come aggirare questo, sarebbe fantastico! – gabn88

+0

Interessato a una soluzione per questo, abbiamo una colonna che ha sia il testo che i numeri interi. Quando viene ordinato '10' si trova accanto a '1' invece che sotto '9'. –

Problemi correlati