Ta sytuacja może wystąpić, jeśli Twój invoice_number
jest przechowywany jako kolumna tekstowa np. varchar(10)
. W takim przypadku, w kolejności alfabetycznej, 9 będzie wartością maksymalną.
Idealnie powinieneś przechowywać wartości, na których chcesz wykonywać operacje numeryczne, jako numeryczne typy danych, np. int
. Jeśli jednak z jakiegoś powodu nie możesz zmienić typu danych kolumny, możesz spróbować rzutować kolumnę przed zastosowaniem MAX
, jak tak:
select max (convert(invoice_number, signed integer)) as maxinv from invoice
UWAGA:konkretnie wspominam o „wartościach, na których chcesz wykonywać operacje numeryczne” ponieważ istnieją przypadki, w których tekst wejściowy jest całkowicie liczbowy, na przykład numery telefonów lub być może numery kart kredytowych, ale nie ma scenariusza, w którym chciałbyś dodać 2 numery telefonów lub wyciągnąć pierwiastek kwadratowy z numeru karty kredytowej. Takie wartości powinny być przechowywane jako tekst.