我目前正在忙于一些SQL(在Netezza和HiveQL中)。我们公司经常使用数字字段表示日期(例如,日期为20150602,月份为20160400)。
我需要在其中一个日期添加6个月,通常我会这样做:
cast(to_char(add_months(to_date(A.date,'yyyyMMdd'),6),'yyyyMMdd') as int)
虽然这并不漂亮,但它确实有用,而且我不知道任何更短或更好的方法。我的主要问题是这是一个大表(120亿行),并且日期转换并不完全是快速的,我正在处理的查询因为长时间运行而被杀死。有没有更好的方法来做到这一点?
答案 0 :(得分:0)
我尝试使用这些列(ALL int)连接到时间维度表:
MonthId StartDate EndDate
1 20150101 20150199
2 20150201 20150299
3 20150301 20150399
.
.
.
24 20161201 20161299
如果您只是想要一个月的第一天(如果您想加入转换完整日期需要不同的时间表,那么请执行此操作,但此示例在iPad上可以轻松写入并且可以展开):
select
t2.startdate,
y.*
from yourtable y
Join timetab t1
on y.dateAsInt between t1.StartDate and t1.EndDate
Join t2
On t1.monthid=t2.monthid-6