首页 > 解决方案 > 将带有月份名称的mysql数据迁移到新结构

问题描述

CREATE TABLE `monthly1` (
  `id` int(255) NOT NULL,
  `year` int(255) NOT NULL,
  `stat_id` varchar(255) NOT NULL,
  `cat_id` varchar(255) NOT NULL,
  `january` varchar(255) NOT NULL,
  `february` varchar(255) NOT NULL,
  `march` varchar(255) NOT NULL,
  `april` varchar(255) NOT NULL,
  `may` varchar(255) NOT NULL,
  `june` varchar(255) NOT NULL,
  `july` varchar(255) NOT NULL,
  `august` varchar(255) NOT NULL,
  `september` varchar(255) NOT NULL,
  `october` varchar(255) NOT NULL,
  `november` varchar(255) NOT NULL,
  `december` varchar(255) NOT NULL,
);

嗨,我有一个现有的 mysql 数据,其结构类似于上面,我想将数据迁移到一个新结构,如下面的结构

CREATE TABLE `monthly2` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `year` int(255) NOT NULL,
  `stat_id` varchar(255) NOT NULL,
  `cat_id` int(11) NOT NULL,
  `monthName` varchar(255) NOT NULL,
  `monthlydata` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

如何正确创建插入查询来执行此操作..我尝试了下面的查询,但是如何将月份名称设置为月份名称(一月)而不是一月数据?

INSERT INTO `monthly2` (`year`, `stat_id`, `cat_id`, `monthName`, `monthlydata`)
select `year`,`stat_id`,`cat_id`, `january`, `january`
from `monthly1 WHERE year >= '2010' AND year < '2018'

标签: mysql

解决方案


首先,将表中的年份列设为每月 1。

使用以下查询在另一个表中插入记录:-

INSERT INTO 
monthly2  
(SELECT `id`,`year`,`stat_id`,`cat_id`, 'january', `january` FROM monthly1 
WHERE year >= 2010 AND year < 2018);

供参考

我必须删除:-

ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

为测试。


推荐阅读