Управление чувствительностью к регистру функций MIN() и MAX()

Задача
Функции MIN() и MAX() выбирают строки, учитывая их регистр, а вам бы этого не хотелось, или наоборот.

Решение
Измените чувствительность строк к регистру.

Обсуждение
Когда функции MIN() и MAX() применяются к строковым значениям, они выводят результаты, руководствуясь правилами лексического упорядочивания. Чувствительность к регистру влияет на сортировку, а значит, и на функции MIN() и MAX().

mysql> SELECT tstr, bstr FROM textblob_val;

+-----+------+
| tstr | bstr |
+-----+------+
| aaa | aaa |
| AAA | AAA |
| bbb | bbb |
| BBB | BBB |
+-----+------+

Но столбцы только выглядят одинаково, а ведут себя по-разному. Столбец bstr относится к типу BLOB и чувствителен к регистру. Столбец tstr имеет тип TEXT и нечувствителен к регистру. Поэтому функции MIN() и MAX() необязательно получат одинаковые результаты для двух столбцов:

mysql> SELECT MIN(tstr), MIN(bstr) FROM textblob_val;

+-----------+------------+
| MIN(tstr) | MIN(bstr) |
+-----------+------------+
| aaa | AAA |
+-----------+------------+

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

mysql> SELECT MIN(BINARY tstr) FROM textblob_val;

+---------------------+
| MIN(BINARY tstr) |
+---------------------+
| AAA |
+---------------------+

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

mysql> SELECT MIN(LOWER(bstr)) FROM textblob_val;

+-----------------------+
| MIN(LOWER(bstr)) |
+-----------------------+
| aaa |
+-----------------------+

К сожалению, в результате выполнения такой операции изменится и отображаемое значение.


Если это важно, используйте вместо только что предложенного такой прием (он может выводить немного другой результат):

mysql> SELECT @min := MIN(LOWER(bstr)) FROM textblob_val;
mysql> SELECT bstr FROM textblob_val WHERE LOWER(bstr) = @min;

+-----+
| bst r |
+-----+
| aaa |
| AAA |
+-----+

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Выбор групп только с определенными характеристиками
Группирование по результатам выражения
Использование ключевого слова DISTINCT для удаления дубликатов
Итоги и значения NULL
Итоги по датам

Вернуться в раздел: MySQL / 7. Формирование итогов