Lets say that I have a table which contains a column for invoice number, the data type is VARCHAR with mixed string/int values like:
SELECT MAX( invoice_number )
HKL9 (string) is greater than
HKL15, beacause they are compared as strings. One way to deal with your problem is to define a column function that returns only the numeric part of the invoice number.
If all your invoice numbers start with
HKL, then you can use:
SELECT MAX(CAST(SUBSTRING(invoice_number, 4, length(invoice_number)-3) AS UNSIGNED)) FROM table
It takes the invoice_number excluding the 3 first characters, converts to int, and selects max from it.