MySQL函数中作为用户变量的关联数组

MySQL函数中作为用户变量的关联数组,mysql,associative-array,Mysql,Associative Array,是否可以将关联数组定义为MySQL函数中的用户变量? 如果可能,我如何创建一个数组,如: nep_years[2002]=[31,31,32,32,31,30,30,29,30,29,30,30]; 在MySQL函数中 非常感谢您的帮助。您是否尝试过使用group_concat的任何权力?我曾多次使用它创建csv结构 select group_concat(id) sold_ids where item_sold = 1; |---------------------| | sold_ids

是否可以将关联数组定义为MySQL函数中的用户变量? 如果可能,我如何创建一个数组,如:

nep_years[2002]=[31,31,32,32,31,30,30,29,30,29,30,30];
在MySQL函数中


非常感谢您的帮助。

您是否尝试过使用group_concat的任何权力?我曾多次使用它创建csv结构

select group_concat(id) sold_ids where item_sold = 1;

|---------------------|
| sold_ids            |
|---------------------|
| "12,45,74,100,123"  |
|---------------------|

您可以将其指定为变量,在函数中传递。

Mysql中没有数组,但您可以使用临时表和函数来实现类似的功能

不确定这是否是你想要的

#Delete temp table and functions
DROP TABLE IF EXISTS nep_years_vals;
DROP FUNCTION IF EXISTS `nep_func`;
DROP FUNCTION IF EXISTS `nep_func2`;

#create new temp table for 'array'
CREATE TEMPORARY TABLE nep_years_vals(nep_key INT, nep_val INT);
#Insert array values
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '31');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '31');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '32');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '32');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '31');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '30');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '30');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '29');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '30');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '29');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '30');
INSERT INTO nep_years_vals(nep_key, nep_val) VALUES ('2002', '30');
#Declare function for selecting array element
DELIMITER $$
CREATE FUNCTION `nep_func`(`nep_key_search` INT, `nep_element_num` INT)
    RETURNS INT
    LANGUAGE SQL
    NOT DETERMINISTIC
    READS SQL DATA
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE myid INT UNSIGNED;
        select nep_val INTO myid from nep_years_vals WHERE nep_key = nep_key_search LIMIT nep_element_num, 1;
    RETURN myid;
END;
$$
#Declare function for getting multiple elements from one array
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `nep_func2`(`nep_key_search` INT, `nep_elements` TEXT)
    RETURNS text
    LANGUAGE SQL
    NOT DETERMINISTIC
    READS SQL DATA
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
     DECLARE inipos INTEGER;
    DECLARE endpos INTEGER;
    DECLARE maxlen INTEGER;
    DECLARE item VARCHAR(100);
    DECLARE delim VARCHAR(1);
    DECLARE allitems TEXT DEFAULT '';
    DECLARE temp INTEGER;
    DECLARE temp2 INTEGER DEFAULT NULL;

    SET delim = ',';
    SET inipos = 1;
    SET nep_elements = CONCAT(nep_elements, delim);
    SET maxlen = LENGTH(nep_elements);

    REPEAT
        SET endpos = LOCATE(delim, nep_elements, inipos);
        SET item =  SUBSTR(nep_elements, inipos, endpos - inipos);

        IF item <> '' AND item IS NOT NULL THEN           
            IF allitems <> '' THEN
                    SET allitems = CONCAT(allitems, ',');
                END IF;
                    SET temp2 = nep_func(nep_key_search, CONVERT(item, UNSIGNED INTEGER));
                    IF temp2 IS NULL THEN
                        SET allitems = CONCAT(allitems, 'NULL');
                    END IF;
                    IF temp2 IS NOT NULL THEN
                        SET allitems = CONCAT(allitems, temp2);
                    END IF;
                    #SET allitems = CONCAT(allitems, nep_func(nep_key_search, CONVERT(item, UNSIGNED INTEGER)));
        END IF;
        SET inipos = endpos + 1;
    UNTIL inipos >= maxlen END REPEAT;

    RETURN allitems;
END;
$$

#Examples, tested on mysql 5.5.27 WIN32
select nep_func(2002, 0);
#Result INTEGER: 31
select nep_func2(2002, '0,1,2,3,100,101');
#Result TEXT: 31,31,32,32,NULL,NULL
#If element does not exists it returns "NULL"

String split借用自

好奇您打算如何使用它。您是否希望只传递一个值为2002的函数,获取逗号分隔的结果列表?@Choosun:我想传递键2002和值的索引,如0,1,2,然后从该函数返回值。为此,我需要创建一个表来存储数据,然后在该函数中查询结果。所以我想克服这个问题,在函数中定义一个关联数组,还有其他选择吗?