Функция Max для столбца varchar, содержащего цифры и символы - PullRequest
0 голосов
/ 16 января 2020

Я использовал SSMS для создания таблицы:

create table test_max_func(
             seq_no int,
             content varchar(255)
);

Затем я вставил в нее несколько строк:

insert into test_max_func(seq_no, content)
values (1, '2.4l multiair i-4 engine'),
       (1, '2.6l multiair i-4 engine'),
       (1, '2.4l engine'),
       (1, '2.6l engine');

И я получил такую ​​таблицу:

     seq_no     content
------------------------------------------
        1       2.4l multiair i-4 engine
        1       2.6l multiair i-4 engine
        1       2.4l engine
        1       2.6l engine

Затем я выполняю следующие SQL команды:

select seq_no, max(content) from test_max_func
group by seq_no

И получаю:

seq_no  (No column name)
---------------------------
   1    2.6l multiair i-4 engine

Можете ли вы объяснить, почему 2.6l multiair i-4 engine является максимальной в столбце содержимого

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Поскольку ваш столбец имеет строковый тип данных, база данных выполняет строковое сравнение. То есть сравнивайте символы один за другим в обеих строках, двигаясь слева направо: как только символ становится больше, чем его аналог, сравнение останавливается. По сути, это алфавитное сравнение, аналогичное тому, как имена сортируются в телефонной книге.

Для вашего набора данных давайте найдем максимальное значение:

2.4l multiair i-4 engine
2.6l multiair i-4 engine
2.4l engine
2.6l engine

Первые два символа ('2.') идентичны во всех строках. Тогда '6' больше 4, поэтому у нас осталось два значения:

2.6l multiair i-4 engine
2.6l engine

Эти строки сначала отличаются символом 6, где 'm' больше 'e', поэтому максимальное значение 2.6l multiair i-4 engine.

1 голос
/ 16 января 2020

Ну, если бы вы заказали столбец content в алфавитном порядке, он был бы последним в списке (по крайней мере, для сопоставлений, с которыми я больше всего знаком). Следовательно, max() возвращает это значение, поскольку оно является «самым большим» значением для столбца.

Это кажется довольно очевидным. Возможно, вам следует объяснить свою путаницу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...