2017-08-31 88 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