【问题标题】:Use variables within sql query在 sql 查询中使用变量
【发布时间】:2017-04-26 23:27:10
【问题描述】:

如果我有以下变量:

@q='minute'
@r=5

如何在查询中使用它们,使其形成以下内容:

select CURRENT_TIME - interval 5 minute;

我尝试了以下方法,但它不起作用:

select CURRENT_TIME - interval @r @q;

【问题讨论】:

    标签: mysql sql phpmyadmin mariadb


    【解决方案1】:

    您必须使用准备好的语句来创建这样的动态查询:

    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将包含时间计算的结果。

    更新:准备好的语句在触发器上不可用,但如果@q 变量只有minutehour,您可以使用标准的case when 语句:

    -- 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 将包含时间计算的结果。

    【讨论】:

    • 还有其他方法可以完成这项工作吗?我希望在触发器中使用代码,但在触发器或存储函数中不允许使用动态 sql。
    • @DanielleS @q 变量的所有变体是什么?
    • “分钟”和“小时”
    • 我正在研究使用替换功能。我现在正在努力。
    • @DanielleS 我添加了额外的代码以避免准备好的语句,您可以在触发器中毫无问题地使用该代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多