2011-06-15 15 views
5

Tengo una tabla con siguiente conjunto de datosUsando MAX() en VARCHAR Campo

ID (VARCHAR2 field) 
D001 
D002 
D010 
D0012 

utilizo max() en este campo.

Select max(ID) from <table-name>; 

Devuelve D010 como resultado.

¿Por qué el resultado no es D0012?

+2

http://en.wikipedia.org/wiki/Lexicographical_order –

+2

Es un campo 'varchar', ¿por qué sería ordenados como un número? –

Respuesta

13

Usted recibe D010 porque alfabéticamente, D010 viene después D0012 o dicho de otra manera, se produce después de D01D00 y por lo tanto todo lo que es D01x se produce después de todo lo que comienza D00x.

+1

Y aquí hay un ejemplo de cómo lidiar con ese problema: http://stackoverflow.com/a/16496963/1469208 – trejder

-1

esto debería funcionar

Select MAX(ID) from table where IsNumeric(ID) = 1 ; 
1

continuación código está trabajando para mí como por su expectativa

select max(to_number(regexp_substr(id, '\d+'))) id from <yourtable>; 
0

Esto sin duda va a funcionar.

select MAX(CAST(REPLACE(REPLACE(ID, 'D', ''), '', '') as int)) from <table-name> 
Cuestiones relacionadas