在 sql 查询中使用变量
Use variables within sql query
如果我有以下变量:
@q='minute'
@r=5
我如何在查询中使用它们以形成以下形式:
select CURRENT_TIME - interval 5 minute;
我已经尝试了以下但它不起作用:
select CURRENT_TIME - interval @r @q;
您必须使用准备好的语句来创建这样的动态查询:
set @q='minute';
set @r=5;
set @sql = concat("select CURRENT_TIME - interval ",@r," ", @q, " into @result_var;");
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
select @result_var;
变量@result_var
将包含时间计算的结果。
更新: 准备好的语句在触发器上不可用,但如果只有 minute
和 hour
,则可以使用标准 case when
语句@q
变量:
-- procedure body
set @q='hour';
set @r=5;
set @result_var = 0;
case
when @q = 'minute' then
select CURRENT_TIME - interval @r minute into @result_var;
when @q = 'hour' then
select CURRENT_TIME - interval @r hour into @result_var;
end case;
select @result_var;
-- end procedure body
同样:变量@result_var
将包含时间计算的结果。
如果我有以下变量:
@q='minute'
@r=5
我如何在查询中使用它们以形成以下形式:
select CURRENT_TIME - interval 5 minute;
我已经尝试了以下但它不起作用:
select CURRENT_TIME - interval @r @q;
您必须使用准备好的语句来创建这样的动态查询:
set @q='minute';
set @r=5;
set @sql = concat("select CURRENT_TIME - interval ",@r," ", @q, " into @result_var;");
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
select @result_var;
变量@result_var
将包含时间计算的结果。
更新: 准备好的语句在触发器上不可用,但如果只有 minute
和 hour
,则可以使用标准 case when
语句@q
变量:
-- procedure body
set @q='hour';
set @r=5;
set @result_var = 0;
case
when @q = 'minute' then
select CURRENT_TIME - interval @r minute into @result_var;
when @q = 'hour' then
select CURRENT_TIME - interval @r hour into @result_var;
end case;
select @result_var;
-- end procedure body
同样:变量@result_var
将包含时间计算的结果。