2011-06-15 3 views
5

J'ai une table de suivre ensemble de donnéesEn utilisant MAX() dans VARCHAR Champ

ID (VARCHAR2 field) 
D001 
D002 
D010 
D0012 

J'utilise max() dans ce domaine.

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

Il renvoie D010 comme résultat.

Pourquoi le résultat n'est-il pas D0012?

+2

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

+2

Il est un champ 'varchar', pourquoi serait-il en tant que numéro triés? –

Répondre

13

Vous obtenez D010 parce que par ordre alphabétique, D010 vient après D0012 ou dit d'une autre manière, D01 vient après D00 et donc tout ce qui est D01x vient après tout ce qui commence D00x.

+1

Et voici un exemple, comment faire face à un tel problème - http://stackoverflow.com/a/16496963/1469208 – trejder

-1

cela devrait fonctionner

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

ci-dessous code fonctionne pour moi selon vos attentes

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

Cela va sûrement travailler.

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