2012-01-20 12 views
7

Tengo una tabla con un campo de nombre (varchar) que solo contiene cadenas numéricas y quiero ordenar mis consultas por este campo. Pero los campos de nombre se ordenan alfabéticamente, pero quiero que se ordenen numéricamente. Por ejemplo si consigo 1 2 200 100 como el nombre de los campos de valores, se ordena al igual que 1 100 2 200 pero les tiene que ser 1 2 100 200.Ordenar el resultado de la consulta por cadenas numéricas en django (postgres back-end)

yo podría ser capaz de llegar a la fila siguiente consulta

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

¿Pero no puede representar esto como django orm querysets? ¿Hay alguna forma de hacer eso?

Respuesta

10

Me gustaría preguntar en primer lugar por qué tiene una columna varchar que debe tratarse como numérica, pero no importa.

se puede utilizar el método de extra queryset para convertir su cadena:

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

¿Qué pasaría si uno o más valores de la columna hubo enteros válidos, habría que recurrir a alfabéticos, aplique ningún orden o no? – sthzg

+2

Fallaría en PostgreSQL y estaría bien en MySQL ... Me acabo de enterar después de la transición de DB ... Si alguien supiera cómo eludir eso, ¡sería genial! – gabn88

+0

Interesado en una solución para esto, tenemos una columna que tiene texto y números enteros. Cuando se clasifica '10' se encuentra al lado de '1' en lugar de '9'. –

Cuestiones relacionadas