Hi,
Just done a test and it works fine.
I used this test data ...
ADD20
ADD2
SHH10
SHH11
SHH1
SHH10000
SHH200
SHH320
SHH21
AGG200
AGG2
AGG2005
AGG35
... and this SQL ...
SELECT CONCAT(SUBSTRING(`test_field`, 1, 3), LPAD(SUBSTRING(`test_field`, 4), 10, '0')) as `order_by`
FROM `test_table`
ORDER BY `order_by` DESC
Only thing to note is that I increased the LPAD level to 10 zeroes to cover the larger numbers. Ended up with ...
SHH0000010000
SHH0000000320
SHH0000000200
SHH0000000021
SHH0000000011
SHH0000000010
SHH0000000001
AGG0000002005
AGG0000000200
AGG0000000035
AGG0000000002
ADD0000000020
ADD0000000002
Pluck off the top one with LIMIT 0,1 and you're done.
Might not be the most efficient method, but it works.
P.
PS. If you are only interested in the numbers being in decreasing order, regardless of the 3-letter prefix, then use ...
SELECT CONVERT(SUBSTRING(`test_field`, 4), UNSIGNED) as `order_by`
FROM `test_table`
ORDER BY `order_by` DESC