Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách hoạt động của hàm MAKE_SET () trong MySQL

Trong MySQL, MAKE_SET() hàm trả về một giá trị đã đặt (một chuỗi chứa các chuỗi con được phân tách bằng , ký tự) bao gồm các ký tự được chỉ định làm đối số khi bạn gọi hàm.

Khi bạn gọi hàm, bạn chỉ định bất kỳ số lượng chuỗi nào (được phân tách bằng dấu phẩy), cũng như một hoặc nhiều giá trị bit xác định chuỗi nào sẽ trả về trong giá trị đã đặt.

Cú pháp

Cú pháp như sau:

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

Ví dụ

Đây là một ví dụ cơ bản:

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

Kết quả:

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

Kết quả này thoạt nghe có vẻ rõ ràng. Rốt cuộc, đối số đầu tiên của chúng ta là 1 và hàm trả về chuỗi đầu tiên.

Tuy nhiên, đó không phải là cách nó hoạt động.

Đây là một ví dụ khác.

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

Kết quả:

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

Lưu ý rằng nó trả về chuỗi thứ ba, mặc dù chúng tôi đã chỉ định 4 là đối số đầu tiên?

Điều này là do MAKE_SET() hàm sử dụng biểu diễn nhị phân của đối số đầu tiên để trả về các chuỗi có thể áp dụng trong các đối số tiếp theo.

Hãy xem ví dụ mã sau để hiểu ý tôi:

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

Kết quả:

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

Ở đây, tôi sử dụng BIN() hàm để trả về giá trị nhị phân của mỗi số.

Chúng ta có thể thấy rằng biểu diễn nhị phân của 4100 . Chúng tôi cần hình dung ngược điều này để áp dụng nó cho MAKE_SET() của chúng tôi ví dụ trên. Trong trường hợp của chúng tôi, đây là giá trị nhị phân có ba chữ số, với chữ số tận cùng bên phải tương ứng với chuỗi đầu tiên, chữ số tiếp theo tương ứng với chuỗi thứ hai và chữ số ngoài cùng bên trái tương ứng với chuỗi thứ ba.

Theo thuật ngữ nhị phân, 1 là “bật” và 0 No tăt rôi". MAKE_SET() hàm chỉ trả về các chuỗi có 1 tương ứng trong giá trị nhị phân của chúng. Do đó, ví dụ của chúng tôi ở trên trả về chuỗi thứ ba.

Dưới đây là một ví dụ khác sử dụng một giá trị khác:

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

Kết quả:

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

Trong trường hợp này, giá trị nhị phân là 1010 . Do đó, nó có hai 1 s, tương ứng với đối số chuỗi thứ hai và thứ tư.

Dưới đây là một số ví dụ khác để minh chứng thêm cho khái niệm này:

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

Kết quả:

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

Và đây là một ví dụ sử dụng một nhóm chuỗi khác:

Kết quả
SELECT MAKE_SET(5, 'Cat','Dog','Horse','Duck') Result;

Kết quả:

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

Nhiều giá trị nhị phân

Bạn có thể sử dụng một đường ống để chuyển nhiều giá trị nhị phân trong đối số đầu tiên:

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

Kết quả:

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

Lưu ý rằng bạn sẽ nhận được kết quả tương tự nếu đảo ngược các giá trị nhị phân trong đối số đầu tiên:

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

Kết quả:

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

Giá trị NULL

Bất kỳ chuỗi nào có giá trị NULL không được nối vào kết quả.

Ví dụ:

Kết quả
SELECT MAKE_SET(1 | 4, 'a','b',NULL,'d') Result;

Kết quả:

+--------+
| 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. Cách lưu trữ ngày giờ trong MySQL với thông tin múi giờ

  2. Làm thế nào để viết một thủ tục được lưu trữ bằng phpmyadmin và làm thế nào để sử dụng nó thông qua php?

  3. Tiện ích mở rộng mysql không được dùng nữa và sẽ bị xóa trong tương lai:hãy sử dụng mysqli hoặc PDO để thay thế

  4. Cách lấy số thứ tự Auto_Increment hiện tại cho MySQL / MariaDB Table

  5. MySQL tự động truyền / chuyển đổi một chuỗi thành một số?