最近用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');
SELECT username, DATE_FORMAT( create_time, ' %Y-%m-%d %H:%i:%s' ) FROM users  INTO OUTFILE '/tmp/user_info.xls'  CHARACTER SET gbk;

补充知识:将Excel文件导入到Navicat Premium中日期变为0000-00-00的解决方案

问题

在某些场景下,需要将本地文件导入到Navicat中。笔者今天遇到的问题是,将excel文件成功导入后,一个在excel中原本正确的日期字段在Navicate中却变成了“0000-00-00 00:00:00”,实在是匪夷所思。

分析

经过观察发现,该日期字段在excel中似乎没有全部显示,比如本来是2018/10/1 0:01:42,excel中显示为01:42.0,于是尝试在excel中修改了该列的单元格格式,重新导入Navicate中,问题得到解决。详细解决方法请见下方。

解决方法

1.导入前,在excel中修改单元格格式,设置为自定义,类型为yyyy/m/d h:mm:ss,并保存文件。

2.重新将文件导入到Navicate中即可。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Android保存32位BMP格式图片
  3. 怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格
  4. API 23 view.ViewGroup——属性分析
  5. android生成json
  6. Android时间工具类 本地转UTC,UTC转本地
  7. %1$s %1$d Android(安卓)string (java & Android(安卓)格式化字符
  8. JsonObject和Gson详解
  9. android studio 格式化代码时注解不换行

随机推荐

  1. PHP Swoole 基本使用
  2. js php实现无刷新下载功能
  3. PHP测试框架PHPUnit基本使用
  4. PHP会话控制:cookie和session区别与用法深
  5. 用Composer构建属于你的PHP框架
  6. PHP如何计算两个时间段交集的天数?
  7. php中的如何使用正则替换
  8. PHP代码编写规范
  9. php删除文件的方法
  10. PHP 微服务集群搭建 - Hyperf