SQL中日期处理非常常见,尤其是字符串格式的时间分区。如果数据是日期格式,那么直接用库中函数处理日期,比较简单。但当日期是字符串时,就需要做一些预处理工作。
本文介绍常见字符串日期的处理方法。以impala为例。
01 将日期字符串20200119转化为bigint时间戳: unix_timestamp (string date,格式)
如:unix_timestamp (‘20200119’,'yyyyMMdd')
返回:
1579363200
02 将日期字符串20200102转化为日期格式:
from_unixtime(unix_timestamp(string date, string pattern))
如:from_unixtime(unix_timestamp(‘20200119’,'yyyyMMdd'))
返回:
2020-01-19 00:00:00
03 字符串格式日期取年份:from_unixtime(unix_timestamp(sting date,格式),年格式)
如取年份:from_unixtime(unix_timestamp(‘20200119’,'yyyyMMdd'),'yyyy') as year
或者 substr(‘20200119’, 1, 4) as year
取月份同理。
04 计算日期时间差:datediff(timestamp enddate, timestamp startdate)
如:datediff(from_unixtime(unix_timestamp(dt,'yyyyMMdd')), '2019-12-30')
05 取工作日:模运算——取余函数:prod(datediff(enddate, startdate)+1, 除数)
如:pmod(datediff(date, '2018-01-01') + 1, 7) between 1 and 5
06 将字符串日期加1天,再转化为字符串
to_timestamp(string date, string pattern): 将字符串转化为时间戳
date_add(timestamp, int n days):日期加n天
如:from_unixtime(unix_timestamp(date_add(to_timestamp(string date, 'yyyyMMdd'), 1)), 'yyyyMMdd')
文末彩蛋
字符串处理之定位字符位置
locate(‘符号’,字段名,第n个)返回第n个符号的位置
如:截取字符串中第2个#后面的8位字符串日期
SUBSTRING(字段名,locate('#',字段名,2)+1)
和“数说123”一起,在数据科学领域中成长!
![5b1cf09df1c44be73e22b71d01089eda.png](https://img-blog.csdnimg.cn/img_convert/5b1cf09df1c44be73e22b71d01089eda.png)