[MYSQL]按日期字段将已有数据分区

创建存储过程

DELIMITER $$

USE `quote`$$

DROP PROCEDURE IF EXISTS `auto_create_partition_for_exist_data`$$

CREATE DEFINER = `root` @`localhost` PROCEDURE `auto_create_partition_for_exist_data` (
  IN beginDate DATE,
  IN endDate DATE,
  IN table_name VARCHAR (50),
  IN fieldTemp VARCHAR (50)
) 
BEGIN
  DECLARE nowdate DATE ;
  DECLARE endtmp DATE ;
  DECLARE dt VARCHAR (256) ;
  DECLARE dtTemp VARCHAR (256) ;
  DECLARE partitionTemp TEXT ;
  SET nowdate = DATE_FORMAT(beginDate, '%Y%m%d') ;
  SET endtmp = DATE_FORMAT(endDate, '%Y%m%d') ;
  SET partitionTemp = CONCAT(
    'ALTER TABLE ',
    table_name,
    ' PARTITION BY RANGE COLUMNS(',
    fieldTemp,
    ')('
  ) ;
  WHILE
    nowdate <= endtmp DO -- SELECT nowdate;
    SET dt = DATE_FORMAT(nowdate, '%Y-%m-%d') ;
    SET dtTemp = DATE_FORMAT(nowdate, '%Y%m%d') ;
    SET partitionTemp = CONCAT(
      partitionTemp,
      'PARTITION p',
      dtTemp,
      ' VALUES LESS THAN(',
      "'",
      dt,
      "'",
      ')'
    ) ;
    IF nowdate != endtmp 
    THEN SET partitionTemp = CONCAT(partitionTemp, ',') ;
    END IF ;
    SET nowdate = DATE_ADD(nowdate, INTERVAL 1 DAY) ;
  END WHILE ;
  SET partitionTemp = CONCAT(partitionTemp, ')') ;
  SELECT 
    dt,
    partitionTemp ;
  SET @v_sql = partitionTemp ;
  PREPARE stmt FROM @v_sql ;
  EXECUTE stmt ;
  DEALLOCATE PREPARE stmt ;
END $$

DELIMITER ;

调用存储过程

CALL auto_create_partition_for_exist_data('2019-10-24', '2019-12-01', 't_quote_history_property_value', 'create_time');

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值