在解析埋点数据时会遇到两种不同的日期格式:yyyymmdd和yyyy-mm-dd,此类型之间的转换主要有两种思路:
第一种方法:from_unixtime+unix_timestamp
--20180905转成2018-09-05
select from_unixtime(unix_timestamp('20180905','yyyymmdd'),'yyyy-mm-dd')
from dw.ceshi_data
--结果如下:
2018-09-05
--2018-09-05转成20180905
select from_unixtime(unix_timestamp('2018-09-05','yyyy-mm-dd'),'yyyymmdd')
from dw.ceshi_data
--结果如下:
20180905
第二种方法:substr + concat
--20180905转成2018-09-05
select concat(substr('20180905',1,4),'-',substr('20180905',5,2),'-',substr('20180905',7,2)) from dw.ceshi_data
结果如下:
2018-09-05
--2018-09-05转成20180905
select concat(substr('2018-09-05',1,4),substr('2018-09-05',6,2),substr('2018-09-05',9,2)) from dw.ceshi_data
结果如下:
20180905
下面主要讲解from_unixtime和unix_timestamp两种函数:
from_unixtime:时间戳转日期函数
用法:from_unixtime(bigint unixtime[, stringformat])
返回值: string
说明: 转化时间戳到当前时区的时间格式
select from_unixtime(1423306743,'yyyyMMdd')
from dw.ceshi_data;
结果如下:
20150207
unix_timestamp:日期转时间戳函数
用法:unix_timestamp(string date)
返回值: bigint
说明: 转换格式为“yyyy-MM-dd HH:mm:ss“的日期到UNIX时间戳。如果转化失败,则返回0。
select unix_timestamp('2018-09-05 12:01:03')
from dw.ceshi_data;
结果如下:
1536120063
--获取当前日期的时间戳:
select unix_timestamp()
from dw.ceshi_data;
结果如下:
1536126324