MySQL выбрать MAX, но отображается не так, как ожидалось - PullRequest
0 голосов
/ 01 октября 2018

у меня запрос, ищущий максимальное значение, но отображаемое не так, как ожидалось

это мои данные в таблице enter image description here

я просто для получения максимального значенияв этом столбце.я использую запрос "SELECT max(substr(no_box,3)) as maxnb FROM tbl_pengecekan", но отображаемое значение 9

enter image description here

ожидаемое значение 10

пожалуйста, помогите мне

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Вы получаете значение 9, потому что это максимальное значение лексикографическое в наборе, к которому вы обращаетесь.Если вы хотите получить числовое максимальное значение, вы должны сначала привести значения к целым числам (в основном, конвертировать из string в int).Вы можете сделать это с помощью cast(substr(no_box, 3) as signed)

Полный код

SELECT 
    max(cast(substr(no_box, 3) as signed)) as maxnb 
FROM tbl_pengecekan
0 голосов
/ 01 октября 2018

Вы также можете принять максимальное значение, удалив A- из строки.

Запрос

select max(`t`.`num`) as `maxnb` from (
    select cast(replace(`no_box`, 'A-', '') as signed) as `num`
   from `tbl_pengecekan`
) as `t`;

Другой способ - упорядочитьстолбец сначала в порядке убывания длины, а затем в порядке убывания самого столбца.А затем ограничить результат до 1.

Запрос

select replace(`no_box`, 'A-', '') as `maxnb`
from `tbl_pengecekan`
order by length(`no_box`) desc, `no_box` desc limit 1;

Найти демо здесь

0 голосов
/ 01 октября 2018

Вам нужно наложить substr (no_box, 3) на int, затем применить max

demo

select max(cast(substr(no_box,3) as signed)) from tablename
...