2011-02-10 12 views
5

Tengo una columna VARCHAR2 que quiero ordenar numéricamente. 99% (o posiblemente incluso 100%) del tiempo que contendrá números. Estaba mirando alrededor y encontré this solution. Citando la fuente:Oracle - Ordenando un campo VARCHAR2 como un NÚMERO - Encontré una solución, necesito una explicación en él

recordar que nuestro objetivo es clasificar el campo supplier_id en orden ascendente (en función de su valor numérico ). Para hacer esto, intente usar la función LPAD.

Por ejemplo,

seleccionar * de orden proveedor por lpad (supplier_id, 10);

Este SQL rellena el frente del campo supplier_id con espacios de hasta 10 caracteres. Ahora, sus resultados deben ordenarse numéricamente en orden ascendente .

He jugado un poco un poco con esta solución y parece ser workign (hasta ahora), pero cómo Funciona, ¿alguien puede explicar?

+3

Bueno, técnicamente eso ordena el campo como INTEGER, no como un número. Si tuviera números decimales allí, no funcionaría. –

Respuesta

8

Al ordenar cadenas/varchar, el campo siempre se inserta de izquierda a derecha, como si ordenara palabras normales.

Es por eso que usted tiene problemas al ordenar

1 
2 
3 
10 
11 
20 

que se ordenan como

1 
10 
11 
2 
20 
3 

Pero, ahora si la almohadilla los valores de la izquierda, tendrá algo así como

001 
002 
003 
010 
011 
020 

que ordenaría correctamente

+0

Buena explicación, gracias – contactmatt

Cuestiones relacionadas