Ngày nay, sử dụng mảng JSON sẽ là một câu trả lời hiển nhiên.
Vì đây là một câu hỏi cũ nhưng vẫn có liên quan nên tôi đã đưa ra một ví dụ ngắn. Các hàm JSON có sẵn kể từ mySQL 5.7.x / MariaDB 10.2.3
Tôi thích giải pháp này hơn ELT () vì nó thực sự giống một mảng hơn và 'mảng' này có thể được sử dụng lại trong mã.
Nhưng hãy cẩn thận: Nó (JSON) chắc chắn chậm hơn nhiều so với việc sử dụng một bảng tạm thời. Nó chỉ tiện dụng hơn. imo.
Đây là cách sử dụng một mảng 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]');
Và đây là một ví dụ nhỏ để hiển thị cách nó hoạt động trong một hàm / thủ tục:
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();
ELT
.