Управление чувствительностью к регистру функций 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 |
+-----+
Теги:
MIN, MAX
Добавлено: 23 Июля 2018 06:30:44 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...