2017-08-31 36 views
1

我目前正在忙于一些SQL(在Netezza和HiveQL中)。我们公司经常使用数字字段作为日期(例如,日期为20150602,月份为20160400)。向数字YMD格式添加月份的有效方法?

我需要6个月添加到这些日期之一,通常我会做:

cast(to_char(add_months(to_date(A.date,'yyyyMMdd'),6),'yyyyMMdd') as int) 

虽然这不是漂亮,它的工作原理,我不知道任何短或更好的办法。我的主要问题是这是一个很大的表(120亿行),日期转换并不精确,而且我正在处理的查询由于运行时间过长而被杀。有没有更好的方法来做到这一点?

+0

什么是这些字段的数据类型?以及你是哪个版本的Hive? –

+0

这不是一个Hive代码 –

+0

@Dudu:你说的对,它的Netezza。问题仍然是一样的。 – BallzofFury

回答

0

我会尝试加入一个时间维度表,这些列(ALL INT): MonthId StartDate EndDate 1 20150101 20150199 2 20150201 20150299 3 20150301 20150399 . . . 24 20161201 20161299

那么做,如果你只是想在每月的第一天,结果(需要一个不同如果时间表要加入变频完整的日期,但这个例子是easyer要在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