Firebird determina si una cadena es todos los números
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?
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);