Comparar cadenas en oracle

javivi
12 de Enero del 2006
Tengo una duda muy simple de expicar, que es está, a ver si alguien tiene una explicación:
Una tabla con una única columna del tipo VARCHAR2(10) con el siguiente contenido:

C1
ab
ac
0

Si hago:
Select C1
from tabla
order by c1 asc

el resultado es:
C1
ab
ac
0

Por lo que entiendo que el valor ‘0’es mayor que ‘ab’ y ‘ac’ (porque sale el último y está ordenado de manera ascendente).

Si ahora hago:
Select C1
from tabla
where C1 > ‘0’
order by c1 asc

El resultado es :
C1
ab
ac

Y a mi entender no debería salir ninguna fila, porque según la primera query ‘0’es mayor que ‘ab’ y ‘ac’.

eddie_
12 de Enero del 2006
Deberias revisar tu primer consulta. Yo obtuve el mismo resultado.


SQL> create table t3 (c1 varchar2(10));

Table created.

SQL> insert into t3 c1 values ('ab');

1 row created.

SQL> insert into t3 c1 values ('ac');

1 row created.

SQL> insert into t3 c1 values ('0');

1 row created.

SQL> COMMIT;

Commit complete.

SQL> select * from t3;

C1
----------
ab
ac
0

SQL> select c1 from t3 order by c1 asc;

C1
----------
0
ab
ac <--- REVISA ESTE RESULTADO!

SQL> select c1 from t3 where c1>'0' order by c1 asc;

C1
----------
ab
ac

----Finalmente una simple comprobacion:

SQL> select 'x' from dual where '0' > 'ac';

no rows selected


Saludos

eddie_
12 de Enero del 2006
Perdón quise decir:

Deberias revisar tu primer consulta. Yo NO obtuve el mismo resultado.

Saludos

javivi
12 de Enero del 2006
He revisado la primera consulta y es correcta.
¿Puede tener algo que ver el juego de caracteres que se esté utilizando?, porque a ti te lo ordena justo al contrario que a mi.

eddie_
12 de Enero del 2006
Hay un bug relacionado con eso, y fue fixeado en la version 9.2.0.1

1) que version de la base tienes?
ejecuta select banner from v$version;

2) prueba correr la consulta sin especificar asc (es por defecto)

3) prueba correr la consulta especificando desc

4) prueba correr la comparacion entre 0 y ac en dual.

Ah y obviamente publica estos resultados
Saludos