最近用mysql导出表数据到excel文件,mysql中的datetime类型导出到excel(excel2016)中被excel识别成它自己默认的日期格式了,在mysql中的格式形如 yyyy-mm-dd hh:mm:ss,到了excel变成了 yyyy/m/d h:mm,看起来不太习惯,当然可以通过设置excel单元格格式改成自定义格式 yyyy-mm-dd hh:mm:ss,但是这样多了一个步骤,能不能直接从mysql导出到excel的就是mysql显示的样式呢?当然可以。
开始猜想是由于mysql中该字段是datetime类型的,导出到excel后excel自动转为它的日期类型,所以可以通过mysql的date_format函数把datetime转为字符串,以为没有问题,结果还是一样的,猜想是对于这种标准日期的字符串的格式excel也会识别成日期格式,于是在导出语句中加上一个字符串的日期,验证了我的猜想。所以就寻思打破这种默认的日期格式但使得它看上去又没什么差别,所以在用date_format转为字符串时,在前面加上一个空格,这样就完美解决了。
测试用表及测试数据
CREATE TABLE `users` (
`username` varchar(255) NOT NULL,
`create_time` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
# 插入测试数据
INSERT INTO `users`(`username`, `create_time`) VALUES
('李四', '2018-10-11 15:54:23'),
('张三', '2018-10-12 15:54:14');
导出excel语句,注意DATE_FORMAT函数里面的格式前面加了个空格(由于表的格式是utf8的,要保证excel打开后不乱码,需要把格式转换为gbk)
SELECT
username,
DATE_FORMAT( create_time, ' %Y-%m-%d %H:%i:%s' )
FROM users
INTO OUTFILE '/tmp/user_info.xls'
CHARACTER SET gbk;