MySQL是否构建变量名?
我试图在用户定义的函数中动态地构建一个变量名,但它似乎不起作用。有没有办法做到这一点,或者使用数组变量 我有一个由7个字符组成的字符串,表示一周中的几天(1234567或1_3_5_7,等等)。我想评估一周内选择一天的频率(从0到7)。我想,使用循环遍历所有7个位置是最简单的,但我收到一条错误消息 [Err]1193-未知系统变量“CONCAT” 有什么关于我如何做到这一点的提示吗?这是我的代码:MySQL是否构建变量名?,mysql,variables,dynamic,Mysql,Variables,Dynamic,我试图在用户定义的函数中动态地构建一个变量名,但它似乎不起作用。有没有办法做到这一点,或者使用数组变量 我有一个由7个字符组成的字符串,表示一周中的几天(1234567或1_3_5_7,等等)。我想评估一周内选择一天的频率(从0到7)。我想,使用循环遍历所有7个位置是最简单的,但我收到一条错误消息 [Err]1193-未知系统变量“CONCAT” 有什么关于我如何做到这一点的提示吗?这是我的代码: DELIMITER $$ DROP FUNCTION IF EXISTS fn_freq$$
DELIMITER $$
DROP FUNCTION IF EXISTS fn_freq$$
CREATE FUNCTION fn_freq(days INT) RETURNS INT
BEGIN
DECLARE D1 VARCHAR(1);
DECLARE D2 VARCHAR(1);
DECLARE D3 VARCHAR(1);
DECLARE D4 VARCHAR(1);
DECLARE D5 VARCHAR(1);
DECLARE D6 VARCHAR(1);
DECLARE D7 VARCHAR(1);
DECLARE x INT;
DECLARE fn_freq INT;
SET x =1;
SET fn_freq = 0;
WHILE x < 8 DO
SET CONCAT('D',x) = MID(days, x, 1);
IF CONCAT('D',x) = '_' THEN
ELSE
SET fn_freq = fn_freq + 1;
SET x = x + 1;
END IF;
SET x = x + 1;
END WHILE;
RETURN fn_freq;
END$$
DELIMITER ;
分隔符$$
下降功能(如果存在)$$
创建函数fn_freq(days INT)返回INT
开始
声明D1 VARCHAR(1);
声明D2 VARCHAR(1);
声明D3 VARCHAR(1);
声明D4 VARCHAR(1);
声明D5 VARCHAR(1);
声明D6 VARCHAR(1);
声明D7 VARCHAR(1);
声明x INT;
声明fn_freq INT;
设置x=1;
设置fn_freq=0;
当x<8时
设置CONCAT('D',x)=中间(天,x,1);
如果CONCAT('D',x)='\ux',则
其他的
设置fn_freq=fn_freq+1;
设置x=x+1;
如果结束;
设置x=x+1;
结束时;
返回fn_freq;
结束$$
定界符;
您不能将CONCAT设置为SET CONCAT('D',x)=MID(days,x,1)
相反,我认为最好声明并将CONCAT值设置为该变量,并将该变量用于IF条件。我还认为,如果情况属实,你错过了在这种情况下必须做的事情 谢谢你的回复。我让它像这样工作,但我仍然很好奇,在其他一些情况下,如何动态地创建一个变量
对于这个函数,我意识到我甚至不需要变量,因为我可以在if子句中直接计算它
DELIMITER $$
DROP FUNCTION IF EXISTS fn_freq$$
CREATE FUNCTION fn_freq(days VarChar(7)) RETURNS INT
BEGIN
DECLARE x INT;
DECLARE fn_freq INT;
SET x =1, fn_freq = 0;
WHILE x < 8 DO
IF MID(days, x, 1) <> '_' THEN
SET fn_freq = fn_freq + 1;
END IF;
SET x = x + 1;
END WHILE;
RETURN fn_freq;
END$$
DELIMITER ;
分隔符$$
下降功能(如果存在)$$
创建函数fn_freq(days VarChar(7))返回INT
开始
声明x INT;
声明fn_freq INT;
设置x=1,fn_freq=0;
当x<8时
如果中间(天,x,1)uu,那么
设置fn_freq=fn_freq+1;
如果结束;
设置x=x+1;
结束时;
返回fn_freq;
结束$$
定界符;