我需要一些有关执行存储在表的列中的表达式(按位)的帮助。
输入:
ID | expression ----|------------- 1 | 1&0 2 | (1&1)|(0&1)
所需的输出:
ID | expression | value ----|-------------|------- 1 | 1&0 | 0 2 | (1&1)|(0&1) | 1
我正在尝试以下类似操作,但未执行该表达式。
PREPARE stmt from 'select ? into @outvar';
set @invar = '1&0';
execute stmt using @invar;
select @outvar;
上面的输出为1&0,但所需的输出为0。
实际上,我想将输出存储在上面的伪代码中所定义的变量中。
答案 0 :(得分:0)
使用准备好的语句,第二轮发送到服务器的内容将按字面处理。它们不能成为SQL的一部分。您不应该为此使用占位符:
SET @invar = '(1&1)&(0&1)';
SET @s = CONCAT('SELECT ', @invar, ' INTO @outvar');
PREPARE stmt FROM @s;
EXECUTE stmt;
SELECT @outvar;
答案 1 :(得分:0)
我为您建立了执行此操作的程序
DROP TABLE IF EXISTS test10;
DROP PROCEDURE IF EXISTS `sp_test10`;
create table test10 (ID int, expression VARCHAR(20));
insert into test10 values ( 1 , '1&0');
insert into test10 values ( 2 , '(1&1)|(0&1)');
CREATE PROCEDURE sp_test10 (IN IN_ID int, OUT OUT_VAL INT)
BEGIN
SELECT expression INTO @exp FROM test10 WHERE ID=IN_ID;
SET @q = CONCAT('SELECT ',@exp,' INTO @exp ');
PREPARE stmt1 FROM @q;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SET OUT_VAL = @exp;
END\\
;
call sp_test10(2,@result);
select @result;
结果:
call sp_test10(1,@result)
返回 0 call sp_test10(2,@result)
返回 1