2012-04-02 10 views
3

Ich fand eine sehr interessante/seltsame Sache über MAX() -Funktion in SQL.
Ich habe Spalte ID mit varchar2 (20) Datentyp, mit folgenden Angaben: -
ID
1
2
3
4
5
6
9
99
909
Wie pro meinem Verständnis, wenn ich verwende "wählen Sie max (ID) aus der Tabelle"; Ich sollte 909 als Ergebnis bekommen, aber ich bekomme 99. Kann jemand erklären, warum das passiert?SQL MAX() Funktion

Antwort

5

Da die Spalte, für die Sie MAX on verwenden, vom Typ VARCHAR ist, werden die Werte basierend auf einer Zeichen-für-Zeichen-Auswertung sortiert. Es wählt 99 aus, weil 9> 0, und es ignoriert den Rest der Zeichenfolge.

9

Sie haben missverstanden - da die Spalte ein Varchar, nicht numerisch ist, ist es nach String-Werten sortiert; 909 kommt vor 99, also 99 ist das Maximum.

Um den maximalen numerischen Wert Ihrer Spalte zu sehen, versuchen:

select max(to_number(ID)) from my_table 
+0

Könnten Sie SQL vorschlagen, die die Konvertierung durchführen und die Antwort liefern würde? Angenommen, wir können das Datenbankschema nicht immer einfach ändern, wenn wir es wollen. – DOK

+0

@DOK: Wie oben? –

+0

Kann ich bitte die Mechanik verstehen ... eine Referenz würde mir wirklich helfen. –

3

Ihre Spalte als Zeichen dargestellt wird, keine Zahlen. Stellen Sie sich also vor, Sie würden diese alphabetisch sortieren. Alphabetisch wird 909 in aufsteigender Reihenfolge vor 99 kommen.