Tình huống này có thể xảy ra nếu invoice_number
của bạn được lưu trữ dưới dạng cột văn bản, ví dụ:varchar(10)
. Trong trường hợp đó, dựa trên thứ tự bảng chữ cái, 9 sẽ là giá trị lớn nhất.
Tốt nhất, bạn nên lưu trữ các giá trị mà bạn muốn thực hiện các phép toán số dưới dạng kiểu dữ liệu số, ví dụ:int
. Tuy nhiên, nếu vì lý do nào đó bạn không thể thay đổi kiểu dữ liệu cột, bạn có thể thử truyền cột trước khi áp dụng MAX
, như vậy:
select max (convert(invoice_number, signed integer)) as maxinv from invoice
LƯU Ý:Tôi đề cập cụ thể đến "các giá trị mà bạn muốn thực hiện các phép toán số" bởi vì có những trường hợp văn bản nhập hoàn toàn là số, chẳng hạn như số điện thoại hoặc có thể là số thẻ tín dụng, nhưng không có trường hợp nào mà bạn muốn thêm 2 số điện thoại hoặc lấy căn bậc hai của số thẻ tín dụng. Các giá trị này phải được lưu trữ dưới dạng văn bản.