Trong MariaDB, MAKE_SET()
là một hàm chuỗi trả về một giá trị đã đặt, dựa trên các giá trị được cung cấp trong các đối số của nó.
Một tập hợp là một chuỗi chứa các chuỗi con được phân tách bằng dấu phẩy (,
) ký tự.
Cú pháp
Cú pháp như sau:
MAKE_SET(bits,str1,str2,...)
Trong đó str1, str2,...
là một hoặc nhiều giá trị chuỗi và bits
chỉ định giá trị chuỗi nào trong số đó để đưa vào tập hợp.
MAKE_SET()
trả về một giá trị đã đặt bao gồm các chuỗi có bit tương ứng trong bits
đặt.
Ví dụ
Dưới đây là một ví dụ để chứng minh:
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );
Kết quả:
+-----------------------------------+ | MAKE_SET( 1, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | a | +-----------------------------------+
Lưu ý rằng nó 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. Do đó, không đơn giản như nói, đối số đầu tiên là 1 và đối số tương ứng với mục 1.
Dưới đây là một ví dụ khác minh họa ý tôi muốn nói:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );
Kết quả:
+-----------------------------------+ | MAKE_SET( 4, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | c | +-----------------------------------+
Cách hoạt động
Hãy xem xét những điều sau:
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ả (sử dụng đầu ra dọc):
1: 1 2: 10 3: 11 4: 100 5: 101 6: 110 7: 111 8: 1000 9: 1001 10: 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 4
là 100
. 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 gồm 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');
Kết quả:
+-------------------------------+ | MAKE_SET(10, 'a','b','c','d') | +-------------------------------+ | 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ả (sử dụng đầu ra dọc):
1: a 2: b 3: a,b 4: c 5: a,c 6: b,c 7: a,b,c 8: d 9: a,d 10: b,d
Dưới đây là một ví dụ sử dụng một nhóm chuỗi khác:
SELECT MAKE_SET(3, 'Cat','Bat','Rat');
Kết quả (sử dụng đầu ra dọc):
+--------------------------------+ | MAKE_SET(3, 'Cat','Bat','Rat') | +--------------------------------+ | Cat,Bat | +--------------------------------+
Nhiều giá trị nhị phân
Sử dụng ký hiệu ống (|
) để bao gồm nhiều hơn một giá trị trong tập hợp:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );
Kết quả:
+----------------------------------------+ | MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) | +----------------------------------------+ | Cat,Rat | +----------------------------------------+
Giá trị rỗng
Nếu giá trị chuỗi là null
, sau đó nó bị bỏ qua khỏi kết quả:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );
Kết quả:
+---------------------------------------+ | MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) | +---------------------------------------+ | Cat | +---------------------------------------+