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)
往期回顾
如何搭建数据指标监测体系?
数据分析必知系列之线性规划问题(ROI &Python 求解线性规划问题)
一个SQL,程序实现多日留存率计算
一个案例掌握五大关键数据分析思维
还在为数据分析职业发展路径迷茫? 一文读懂数据分析、数据挖掘、算法、数据开发工程师的异同
抖音日活3.2亿,可能有 3.3亿用户在同一天内使用抖音吗?(泊松分布的Python实现)
和“数说123”一起,在数据科学领域中成长!