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

これはハイブのコードではありません –

+0

@Dudu:そうです、そのNetezzaです。問題はまだ同じです。 – BallzofFury

答えて

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 
関連する問題