Comparar cadenas en oracle
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Â’.
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Â’.
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
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
Perdón quise decir:
Deberias revisar tu primer consulta. Yo NO obtuve el mismo resultado.
Saludos
Deberias revisar tu primer consulta. Yo NO obtuve el mismo resultado.
Saludos
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.
¿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.
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
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
