mysql字符串时间转换为时间格式

2020年6月28日 发表评论 阅读评论

应朋友的要求,帮他采集的一些数据,直接使用的pandas进行的处理,直接入了库,由于比较懒,表结构之前没有进行设计。有一个日期的字段直接是默认以text的方式进行录入的,这个太占用空间了,后面改成了int(8),虽然相对好一些,不过总感觉还是别扭,空下来的时候重新设计了表结构,也顺带把这个数据处理。

mysql-date

上图上可以看出,当前时间格式是YYYYMMDD的格式,而mysql不是按此格式存的,mysql中的date格式是YYYY-MM-DD,占用3 bytes,比上面int(8)少了5个bytes。在处理之前需要先把老的数据进行格式转换,转换处理的SQL语句如下:

select code,price,name,CONCAT(SUBSTRING(date,1,4),'-',SUBSTRING(date,5,2),'-',SUBSTRING(date,7,2))as date from stock;

使用该语句转换后的格式如下:

convert-date-mysql

接下来使用create table as select语名创建一张新的表,把原来的数据导过去,后面再修改表名:

CREATE table newstock as (select code,price,name,CONCAT(SUBSTRING(date,1,4),'-',SUBSTRING(date,5,2),'-',SUBSTRING(date,7,2))as date from stock) ;

注:这里需要注意下,使用CREATE TABLE A AS SELECT x,x,x,xx FROM B语句,不会把索引复制过来(CREATE TABLE A LIKE B语句可以复制表和索引),还需要使用alter增加下原有的索引信息。

修改完成后,去修改下date列的格式:

----有以下两种方式修改数据格式
alter table newstock change `date`  `date` date NOT NULL;
alter table newstock modify column `date`  date NOT NULL;
---- alter table 旧名 rename (to)新名,下面2种方式都可以
alter table newstock rename stock;
alter table newstock  rename to stock;

操作结果如下:

mysql> desc newstock;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| code  | varchar(10) | NO   |     | NULL    |       |
| price | float(8,2)  | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| date  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
mysql>
mysql> alter table newstock modify column `date`  date NOT NULL;
Query OK, 11114 rows affected (0.19 sec)
Records: 11114  Duplicates: 0  Warnings: 0
mysql> desc newstock;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| code  | varchar(10) | NO   |     | NULL    |       |
| price | float(8,2)  | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| date  | date        | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

后面的date已经变成date格式了。




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: 数据库 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.