Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ฟังก์ชัน EXPORT_SET() ใน MySQL ทำงานอย่างไร

ฟังก์ชันนี้เป็นฟังก์ชันสตริงของ MySQL ใช้สำหรับค้นหา ด้วยไวยากรณ์ของ EXPORT_SET() เราสามารถเข้าใจการทำงานได้:

ไวยากรณ์

EXPORT_SET(bits, on, off, separator, number_of_bits)

ในไวยากรณ์นี้:

  • bits (ได้จากการแปลงจำนวนเต็มเป็นบิต) จะถูกเปรียบเทียบว่าเป็น 1 หรือ 0
  • on คืออาร์กิวเมนต์ที่ 2 มีค่าในเครื่องหมายคำพูด จะคืนค่านี้หากบิตในอาร์กิวเมนต์แรกเป็น 1
  • off คืออาร์กิวเมนต์ที่ 3 มีค่าในเครื่องหมายคำพูด จะคืนค่านี้หากบิตในอาร์กิวเมนต์แรกเป็น 0
  • separator ใช้วางระหว่างค่าที่คืนขณะแสดงผล สามารถเป็นตัวอักษรหรือค่าใดๆ ในเครื่องหมายคำพูด
  • number_of_bits มีค่าของบิตที่จะตรวจสอบว่าเป็น 1 หรือ 0

การทำงานของ EXPORT_SET()

ทำงานดังนี้:

  • แปลงค่าจำนวนเต็มที่ให้เป็นอาร์กิวเมนต์แรกเป็นบิต (0 และ 1) ตรวจสอบทุกบิตว่าเป็น 1 หรือ 0 ลำดับการตรวจสอบคือจากขวาไปซ้าย
  • MySQL ตัดสินใจว่าจะทำอะไรหลังตรวจสอบ: หากบิตเป็น 1 คืนอาร์กิวเมนต์ที่ 2 ('on') หากเป็น 0 คืนอาร์กิวเมนต์ที่ 3 ('off')
  • การตรวจสอบดำเนินต่อไปจนถึงจำนวนบิตที่ระบุในอาร์กิวเมนต์ที่ 5
  • MySQL จะคืนผลลัพธ์และวางตัวคั่นระหว่างค่าที่คืน ค่าจะถูกคืนจากซ้ายไปขวา

ตัวอย่าง

mysql> SELECT EXPORT_SET(8, '1', '0', ',', 8);
+-------------------------------+
| EXPORT_SET(8, '1', '0', ',', 8) |
+-------------------------------+
| 0,0,0,1,0,0,0,0               |
+-------------------------------+
1 row in set (0.00 sec)
mysql> SELECT EXPORT_SET(8, '1', '0', ',', 4);
+-------------------------------+
| EXPORT_SET(8, '1', '0', ',', 4) |
+-------------------------------+
| 0,0,0,1                       |
+-------------------------------+
1 row in set (0.00 sec)

ในทั้งสองตัวอย่าง เราให้ 8 เป็นอาร์กิวเมนต์แรก ซึ่งจะแปลงเป็นบิตคือ 1000 แล้วตรวจสอบ 1 และ 0 จนถึง 8 บิต (ตัวอย่างแรก) และ 4 บิต (ตัวอย่างที่สอง) เนื่องจากระบุ 8 และ 4 เป็นอาร์กิวเมนต์ที่ 5 ตามลำดับ ในการแสดงผล ใช้คอมม่า (,) เป็นตัวคั่น เนื่องจากระบุเป็นอาร์กิวเมนต์ที่ 4 ในทั้งสองกรณี

ลำดับการตรวจสอบจากขวาไปซ้าย ในตัวอย่าง 1000 บิตขวามือสุดคือ 0 จึงคืนอาร์กิวเมนต์ที่ 3 คือ 0 ต่อไปอีกสองตำแหน่งก็เป็น 0 จึงคืน 0 อีกสองตัว แล้วเจอ 1 จึงคืนอาร์กิวเมนต์ที่ 2 คือ 1 ในตัวอย่างที่ 2 ได้ผลลัพธ์ 4 หลัก เพราะตรวจสอบ 4 หลัก แต่ตัวอย่างแรกตรวจสอบ 8 หลัก จึงได้ 8 หลัก ลำดับผลลัพธ์จากซ้ายไปขวา จึงแสดงเป็น 0,0,0,1,0,0,0,0 และ 0,0,0,1 ตามลำดับ