Mysql
 sql >> база данни >  >> RDS >> Mysql

Как работи функцията MAKE_SET() в MySQL

В MySQL, MAKE_SET() функцията връща зададена стойност (низ, съдържащ поднизове, разделени с , символи), състояща се от знаците, посочени като аргументи, когато извикате функцията.

Когато извикате функцията, посочвате произволен брой низове (разделени със запетая), както и една или повече битови стойности, които определят кои низове да се върнат в зададената стойност.

Синтаксис

Синтаксисът е така:

MAKE_SET(bits,str1,str2,...)

Пример

Ето един основен пример:

SELECT MAKE_SET(1, 'a','b','c','d') Result;

Резултат:

+--------+
| Result |
+--------+
| a      |
+--------+

Този резултат може да изглежда очевиден в началото. В крайна сметка първият ни аргумент е 1 , а функцията връща първия низ.

Това обаче не е точно как работи.

Ето още един пример.

SELECT MAKE_SET(4, 'a','b','c','d') Result;

Резултат:

+--------+
| Result |
+--------+
| c      |
+--------+

Забележете, че върна третия низ, въпреки че посочихме 4 като първи аргумент?

Това е така, защото MAKE_SET() функцията използва двоичното представяне на първия аргумент, за да върне приложимите низове в следващите аргументи.

Вижте следния пример за код, за да видите какво имам предвид:

SELECT 
  BIN(1) AS '1',
  BIN(2) AS '2',
  BIN(3) AS '3',
  BIN(4) AS '4',
  BIN(5) AS '5',
  BIN(6) AS '6',
  BIN(7) AS '7',
  BIN(8) AS '8',
  BIN(9) AS '9',
  BIN(10) AS '10';

Резултат:

+------+------+------+------+------+------+------+------+------+------+
| 1    | 2    | 3    | 4    | 5    | 6    | 7    | 8    | 9    | 10   |
+------+------+------+------+------+------+------+------+------+------+
| 1    | 10   | 11   | 100  | 101  | 110  | 111  | 1000 | 1001 | 1010 |
+------+------+------+------+------+------+------+------+------+------+

Тук използвам BIN() функция за връщане на двоичната стойност на всяко число.

Можем да видим, че двоичното представяне на 4 е 100 . Трябва да визуализираме това назад, за да го приложим към нашия MAKE_SET() пример по-горе. В нашия случай това е трицифрена двоична стойност, като най-дясната цифра съответства на първия низ, следващата цифра съответства на втория низ, а най-лявата цифра съответства на третия низ.

В двоични термини, 1 е „включено“ и 0 е изключен". MAKE_SET() функцията връща само низове, които имат съответен 1 в тяхната двоична стойност. Следователно нашият пример по-горе връща третия низ.

Ето още един пример, използващ различна стойност:

SELECT MAKE_SET(10, 'a','b','c','d') Result;

Резултат:

+--------+
| Result |
+--------+
| b,d    |
+--------+

В този случай двоичната стойност е 1010 . Следователно има две 1 s, които съответстват на втория и четвъртия аргумент на низа.

Ето още няколко примера за по-нататъшно демонстриране на концепцията:

SELECT 
  MAKE_SET(1, 'a','b','c','d') AS '1',
  MAKE_SET(2, 'a','b','c','d') AS '2',
  MAKE_SET(3, 'a','b','c','d') AS '3',
  MAKE_SET(4, 'a','b','c','d') AS '4',
  MAKE_SET(5, 'a','b','c','d') AS '5',
  MAKE_SET(6, 'a','b','c','d') AS '6',
  MAKE_SET(7, 'a','b','c','d') AS '7',
  MAKE_SET(8, 'a','b','c','d') AS '8',
  MAKE_SET(9, 'a','b','c','d') AS '9',
  MAKE_SET(10, 'a','b','c','d') AS '10';

Резултат:

+---+---+-----+---+-----+-----+-------+---+-----+-----+
| 1 | 2 | 3   | 4 | 5   | 6   | 7     | 8 | 9   | 10  |
+---+---+-----+---+-----+-----+-------+---+-----+-----+
| a | b | a,b | c | a,c | b,c | a,b,c | d | a,d | b,d |
+---+---+-----+---+-----+-----+-------+---+-----+-----+

И ето пример за използване на различен набор от низове:

SELECT MAKE_SET(5, 'Cat','Dog','Horse','Duck') Result;

Резултат:

+-----------+
| Result    |
+-----------+
| Cat,Horse |
+-----------+

Множество двоични стойности

Можете да използвате тръба, за да предадете множество двоични стойности в първия аргумент:

SELECT MAKE_SET(1 | 4, 'a','b','c','d') Result;

Резултат:

+--------+
| Result |
+--------+
| a,c    |
+--------+

Имайте предвид, че ще получите същия резултат, ако обърнете двоичните стойности в първия аргумент:

SELECT MAKE_SET(4 | 1, 'a','b','c','d') Result;

Резултат:

+--------+
| Result |
+--------+
| a,c    |
+--------+

NULL стойности

Всички низове със стойности NULL не се добавят към резултата.

Пример:

SELECT MAKE_SET(1 | 4, 'a','b',NULL,'d') Result;

Резултат:

+--------+
| Result |
+--------+
| a      |
+--------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да получа enum възможни стойности в MySQL база данни?

  2. MySQL:Изберете произволен запис, но тегло към определени записи

  3. 5 най-добри онлайн курсове за изучаване на MySQL

  4. MySQL – Възстановяване на пропусната база данни със схема на производителност

  5. Изберете данни между диапазон от дата/час