qq_32224085 2017-04-01 08:34 采纳率: 0%
浏览 1272

mysql 怎么删除八小时之前的表

图片说明就比如要删除这些以时间为表名的表

  • 写回答

1条回答 默认 最新

  • zhangyuanyincsdn 2017-04-01 11:20
    关注
    1. 创建存储过程实现删除如下:

    delimiter $
    create procedure dropTablePro(in h int(2), in m int(2), in suffix varchar(8))
    begin
    /* h 小时 , m 分钟 */

    -- 小时计数器
    declare h_cnt int(2) default 1;
    -- 分钟计数器
    declare m_cnt int(2) default 1;
    declare tab_name varchar(32) default '';
    
    loop1: while(h_cnt <= h) do
        loop2: while(m_cnt <= m) do
            -- 拼接表名
            if(m_cnt < 10) then
                set tab_name = concat(date_format(date_sub(now(), interval h_cnt hour), '%Y%m%d%H'), '0', CAST(m_cnt AS CHAR), suffix);
            else 
                set tab_name = concat(date_format(date_sub(now(), interval h_cnt hour), '%Y%m%d%H'), CAST(m_cnt AS CHAR), suffix);
            end if;
    
            set @dropSql = concat('drop table if exists ', tab_name);
            prepare droptab from @dropSql;
            execute droptab;
            deallocate prepare droptab;
                        set m_cnt = m_cnt + 1;
        end while loop2; 
    
                set m_cnt = 1;
                set h_cnt = h_cnt + 1;
    end while loop1;
    

    end;
    delimiter ;

    1. 调用存储过程实现删除: call dropTablePro(2, 60, 'abc'); 说明:删除当前时间前两小时,且后缀为 'abc' 的表; 具体使用请参考自己的表名。
    评论

报告相同问题?