Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MAX(Spalte) gibt mir einen falschen Wert zurück

Diese Situation kann auftreten, wenn Ihre invoice_number wird als Textspalte gespeichert z.B. varchar(10) . In diesem Fall, basierend auf der alphabetischen Reihenfolge, ist 9 der maximale Wert.

Idealerweise sollten Sie Werte, auf denen Sie numerische Operationen ausführen möchten, als numerische Datentypen speichern, z. int . Wenn Sie jedoch aus irgendeinem Grund den Datentyp der Spalte nicht ändern können, können Sie versuchen, die Spalte umzuwandeln, bevor Sie MAX anwenden , etwa so:

select max (convert(invoice_number, signed integer)) as maxinv from invoice

HINWEIS:Ich erwähne ausdrücklich "Werte, auf denen Sie numerische Operationen ausführen möchten" weil es Fälle gibt, in denen der Eingabetext vollständig numerisch ist, wie z. B. Telefonnummern oder vielleicht Kreditkartennummern, aber es gibt kein Szenario, in dem Sie zwei Telefonnummern hinzufügen oder die Quadratwurzel einer Kreditkartennummer ziehen möchten. Solche Werte sollten als Text gespeichert werden.