Pregunta

Tengo un campo VARCHAR en una tabla de Firebird 2.0 que puede contener caracteres alfanuméricos. Necesito ordenar los datos en este campo, ordenar todos los valores que contengan solo números como números y ordenar los demás valores como 0.

Por ejemplo, si tengo cuatro valores,

"1", "2", "10", "string", 

Necesito clasificarlo como

"string", "1", "2", "10". 

Ordenación predeterminada con ordenación de cadenas como

"1", "10", "2", "string".

Estaba pensando en enviar los valores a INTEGER, pero obtengo un error de conversión en las cadenas, lo que por supuesto es correcto. ¿Cómo evitar esto?

¿Fue útil?

Solución

Puedes usar la función incorporada LPAD:

SELECT
  ...
  <number_field>,
  ...
FROM
  ...
ORDER BY
  LPAD(<numer_field>, 10)

Otros consejos

Cree una columna adicional donde almacene los valores que se pueden ordenar usando su aplicación. Luego haz una clasificación basada en esa columna. Si desea que sus números estén al final, inserte " ZZZ " (o " & # 220; & # 220; & # 220; " o lo que sea el último carácter en su idioma) delante de los números. Formato similar (" ZZZ% 012d " ;, my_num);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top