Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak działa funkcja MAKE_SET() w MySQL

W MySQL funkcja MAKE_SET() funkcja zwraca ustawioną wartość (łańcuch zawierający podciągi oddzielone , znaków) składający się ze znaków określonych jako argumenty podczas wywoływania funkcji.

Kiedy wywołujesz funkcję, określasz dowolną liczbę ciągów (oddzielonych przecinkiem), a także jedną lub więcej wartości bitowych, które określają, które ciągi mają zostać zwrócone w ustawionej wartości.

Składnia

Składnia wygląda tak:

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

Przykład

Oto podstawowy przykład:

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

Wynik:

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

Na pierwszy rzut oka ten wynik może wydawać się oczywisty. W końcu naszym pierwszym argumentem jest 1 , a funkcja zwraca pierwszy ciąg.

Jednak nie do końca tak to działa.

Oto kolejny przykład.

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

Wynik:

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

Zauważ, że zwrócił trzeci ciąg, mimo że określiliśmy 4 jako pierwszy argument?

Dzieje się tak, ponieważ MAKE_SET() funkcja używa reprezentacji binarnej pierwszego argumentu, aby zwrócić odpowiednie ciągi w kolejnych argumentach.

Spójrz na poniższy przykład kodu, aby zobaczyć, co mam na myśli:

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';

Wynik:

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

Tutaj używam BIN() funkcja zwracająca wartość binarną każdej liczby.

Widzimy, że binarna reprezentacja 4 to 100 . Musimy to zwizualizować wstecz, aby zastosować to do naszego MAKE_SET() przykład powyżej. W naszym przypadku jest to trzycyfrowa wartość binarna, przy czym skrajna prawa cyfra odpowiada pierwszemu ciągowi, następna cyfra odpowiada drugiemu ciągowi, a skrajna lewa cyfra odpowiada trzeciemu ciągowi.

W kategoriach binarnych 1 jest „włączony” i 0 jest wyłączony". MAKE_SET() funkcja zwraca tylko ciągi, które mają odpowiadające 1 w ich wartości binarnej. Dlatego nasz przykład powyżej zwraca trzeci ciąg.

Oto kolejny przykład z użyciem innej wartości:

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

Wynik:

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

W tym przypadku wartość binarna to 1010 . Dlatego ma dwa 1 s, które odpowiadają drugiemu i czwartemu argumentowi ciągu.

Oto kilka przykładów, aby lepiej zademonstrować tę koncepcję:

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';

Wynik:

+---+---+-----+---+-----+-----+-------+---+-----+-----+
| 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 |
+---+---+-----+---+-----+-----+-------+---+-----+-----+

A oto przykład z użyciem innego zestawu ciągów:

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

Wynik:

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

Wiele wartości binarnych

Możesz użyć potoku, aby przekazać wiele wartości binarnych w pierwszym argumencie:

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

Wynik:

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

Zauważ, że uzyskasz ten sam wynik, jeśli odwrócisz wartości binarne w pierwszym argumencie:

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

Wynik:

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

Wartości NULL

Żadne ciągi z wartościami NULL nie są dołączane do wyniku.

Przykład:

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

Wynik:

+--------+
| 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. INTERSECT w MySQL

  2. Pisanie opcjonalnych parametrów w procedurach składowanych w MySQL?

  3. Odmowa dostępu dla użytkownika „root”@„localhost” podczas próby nadania uprawnień. Jak nadawać uprawnienia?

  4. Funkcja MySQL ATAN2() – Zwróć Arc Tangent z 2 wartości

  5. Jak utworzyć bazę danych MySQL za pomocą interfejsu API cPanel