该文章主要对上次的4分钟导入千万级别数据之后的数据处理,上次用下面这条语句导入的千万级别的数据后,发现所有数据的字段全为文本类型数据,连导进去的时间也是用文本类型存储的,操作起来不方便,对此这次将文本类型转为各种类型,这里以将文本类型转为时间DATETIME类型为例;
load data infile 'D:/traffic_shenzhen.csv'into table traffic_shenzhen fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\n';
将dtime字段的类型转化为datatime类型:
注:表名:fujian3
(1)首先新建一个新的datetimel类型的字段(time):
ALTER TABLE fujian3 ADD time datetime
(2)然后将dtime字段的所有数据转为datetime类型的数据后存进time里面,因为dtime字段为文本类型,转完后没法存在dtime字段下,只能存在datetime类型的time下面
update fujian3 set time=str_to_date(dtime,'%Y/%m/%d %H:%i:%s')
可以看到time已经存储了dtime里面的时间数据,而且time是datetime类型的数据。
(3)接下来只要把dtime字段删除,再将time字段改为dtime就行了。
(4)关于str_to_date(str,format)函数(mysql日期和字符相互转换方法 )
注意:这里有一个重点,str不能为空白,且str的数据和format要一一对应,不然会报错。
date_format(date,’%Y-%m-%d’) ————–>oracle中的to_char();
str_to_date(date,’%Y-%m-%d’) ————–>oracle中的to_date();
%Y:代表4位的年份
%y:代表2为的年份
%m:代表月, 格式为(01……12)
%c:代表月, 格式为(1……12)
%d:代表月份中的天数,格式为(00……31)
%e:代表月份中的天数, 格式为(0……31)
%H:代表小时,格式为(00……23)
%k:代表 小时,格式为(0……23)
%h: 代表小时,格式为(01……12)
%I: 代表小时,格式为(01……12)
%l :代表小时,格式为(1……12)
%i: 代表分钟, 格式为(00……59) 【只有这一个代表分钟,大写的I 不代表分钟代表小时】
%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
%T:代表 时间,格式为24 小时(hh:mm:ss)
%S:代表 秒,格式为(00……59)
%s:代表 秒,格式为(00……59)
例子:
select str_to_date(‘09/01/2009’,’%m/%d/%Y’)
select str_to_date(‘20140422154706’,’%Y%m%d%H%i%s’)
select str_to_date(‘2014-04-22 15:47:06’,’%Y-%m-%d %H:%i:%s’)
(5)其他文本转其他类型的思路基本跟这个差不多,像文本类型转int类型等,只不过转化的函数不同。
以上部分数据来自网上数据的整理和总结,如有错误的地方,望指出。