Функция SQL MAX () - PullRequest
       8

Функция SQL MAX ()

3 голосов
/ 02 апреля 2012

Я нашел очень интересную / странную вещь о функции MAX () в SQL.У меня есть идентификатор столбца с типом данных varchar2 (20), имеющий следующие записи: -ID <br/> 1 <br/> 2 <br/> 3 <br/> 4 <br/> 5 <br/> 6 <br/> 9 <br/> 99 <br/> 909<br/> В соответствии с моим пониманием, если я использую «выбрать максимум (ID) из таблицы;»Я должен получить 909 в результате, но я получу 99. Может кто-нибудь объяснить, почему это происходит?

Ответы [ 3 ]

9 голосов
/ 02 апреля 2012

Вы неправильно поняли - поскольку столбец является varchar, а не числовым, он сортируется по строковым значениям; 909 предшествует 99, поэтому 99 является максимальным.

Чтобы увидеть максимальное числовое значение вашего столбца, попробуйте:

select max(to_number(ID)) from my_table
6 голосов
/ 02 апреля 2012

Поскольку столбец, в котором вы используете MAX, имеет тип VARCHAR, он будет сортировать значения на основе посимвольной оценки.Он выбирает 99, потому что 9> 0, и игнорирует остальную часть строки.

3 голосов
/ 02 апреля 2012

Ваш столбец представлен в виде символов, а не цифр.Так что думайте об этом, как в алфавитном порядке.В алфавитном порядке 909 будет предшествовать 99 в порядке возрастания.

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