ปัจจุบันการใช้อาร์เรย์ JSONเป็นคำตอบที่ชัดเจน
เนื่องจากนี่เป็นคำถามเก่า แต่ยังคงมีความเกี่ยวข้องฉันจึงสร้างตัวอย่างสั้น ๆ ฟังก์ชัน JSON พร้อมใช้งานตั้งแต่ mySQL 5.7.x / MariaDB 10.2.3
ฉันชอบโซลูชันนี้มากกว่า ELT () เพราะมันเหมือนกับอาร์เรย์มากกว่าและ 'อาร์เรย์' นี้สามารถใช้ซ้ำในโค้ดได้
แต่ระวัง: มัน (JSON) ช้ากว่าการใช้ตารางชั่วคราวอย่างแน่นอน มีประโยชน์มากขึ้น imo.
วิธีใช้อาร์เรย์ JSON มีดังนี้
SET @myjson = '["gmail.com","mail.ru","arcor.de","gmx.de","t-online.de",
"web.de","googlemail.com","freenet.de","yahoo.de","gmx.net",
"me.com","bluewin.ch","hotmail.com","hotmail.de","live.de",
"icloud.com","hotmail.co.uk","yahoo.co.jp","yandex.ru"]';
SELECT JSON_LENGTH(@myjson);
SELECT JSON_VALUE(@myjson, '$[0]');
และนี่คือตัวอย่างเล็กน้อยเพื่อแสดงวิธีการทำงานในฟังก์ชัน / ขั้นตอน:
DELIMITER //
CREATE OR REPLACE FUNCTION example() RETURNS varchar(1000) DETERMINISTIC
BEGIN
DECLARE _result varchar(1000) DEFAULT '';
DECLARE _counter INT DEFAULT 0;
DECLARE _value varchar(50);
SET @myjson = '["gmail.com","mail.ru","arcor.de","gmx.de","t-online.de",
"web.de","googlemail.com","freenet.de","yahoo.de","gmx.net",
"me.com","bluewin.ch","hotmail.com","hotmail.de","live.de",
"icloud.com","hotmail.co.uk","yahoo.co.jp","yandex.ru"]';
WHILE _counter < JSON_LENGTH(@myjson) DO
SET _result = CONCAT(_result, _counter, '-', JSON_VALUE(@myjson, CONCAT('$[',_counter,']')), '#');
SET _counter = _counter + 1;
END WHILE;
RETURN _result;
END //
DELIMITER ;
SELECT example();