2016-01-04 2 views
1

У меня есть таблица базы данных с уникальным столбца, содержащего значение, какмакс() в MySQL возвращает 9999

invid 
---------- 
500 
1000 
B2222 
A9998 
A9999 
A10000 

проблема, когда мой запрос не более (Инвид) является возвращение A9999 что такое решение

+2

Из-за лексикографическое упорядочение. –

+0

Пожалуйста, ознакомьтесь с приведенными ниже ответами, спасибо. –

ответ

0

Вы можете SELECT максимум числового значения в столбце invid:

SELECT t.invid, MAX(t.value) AS maxValue 
FROM 
(
    SELECT invid, 
     CASE WHEN invid LIKE '[A-Z]%' 
      THEN CAST(SUBSTRING(invid, 2) AS UNSIGNED) 
      ELSE CAST(invid AS UNSIGNED) 
     END AS value 
    FROM yourTable 
) t 

Это предполагает, что каждая запись в invid будет иметь максимум на e письмо, префиксное число. Это не учитывает возможности связей для максимальной ценности.

+0

Не работает синтаксическая ошибка –

+0

Какая ошибка? –

+0

it show invid-A10000 maxValue-A9999 –

0

попробовать это

SELECT CONCAT('A', MAX(0+SUBSTRING(invid,2))) FROM your_table 

Проблема в том, что вы пытаетесь найти максимальное значение буквенно-цифровой, в этом случае A9999 больше, чем A10000, это не то же самое с 9999 и 10000.

+0

Не значение по умолчанию –

0

Лучшее решение - исправить проблему навсегда, изменив столбец на auto_increment и удалите письмо A.

В противном случае вы можете использовать следующий запрос:

SELECT CONCAT('A' 
     , MAX(0+SUBSTRING(invid,2))) 
FROM table