Поведение mysql Max с числовыми значениями в поле varchar - PullRequest
8 голосов
/ 05 сентября 2011

У нас есть таблица базы данных, которая имеет ключи и значения, где значение может быть любым в поле varchar. Значения приведены для атрибутов об элементе, а один атрибут - цена.

Чтобы создать поле выбора для цен, я использовал функцию Max(), чтобы найти наибольшее значение в столбце значений, который, похоже, работал.

Затем, когда мы получили цены свыше 100 фунтов стерлингов, они начали возвращаться как максимальное значение. Я понимаю, что это потому, что это строковое значение, а не числовое.

Путаница возникает при выполнении команды, подобной select max(value) from attributes where value > 100, потому что теперь оператор распознает, что 101> 100, но 99 не так, возвращает 101 как максимальное значение, однако без предложения where value > 100 99 обрабатывается как> 101 Почему предложение> 100 работает как числовое сравнение, а максимальное - нет?

Есть ли причина, по которой это происходит?

1 Ответ

20 голосов
/ 05 сентября 2011

Не смешивать varchar с числовым,
Идея решения хранится только в числовом виде для использования max агрегатной функции,
альтернативно

max( cast(value as unsigned) )

Когда вы делаете MAXявляется приведением к строке.
При выполнении сравнения выполняется приведение к числовому значению.

Причина?
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_max
(возвращает максимальное строковое значение)

...