2017-02-14 21 views
2

我想用HQL創建一年中所有日子的表格。 我已經嘗試過這種做法:如何使用start_date變量創建一年中所有日子的表格?

generate days from date range

但HQL是從SQL 什麼是最好的做法有點不同?
使用PL/HQL或使用bash腳本並導入?

預期的結果:

start_date = 2017-02-14; 

| date  | 
|2017-02-14| 
|2017-02-13| 
|2017-02-12| 
|2017-02-11| 
|2017-02-10| 
|2017-02-09| 
|2017-02-08| 
|2017-02-07| 
.... 

感謝

+0

年和起始日期的第一天之間一年只有幾天的所有天(應該不是被end_date之間?)? –

+0

無論哪種方式....使用start_date更容易,cos end_date將是:'end_date = DATE_SUB('$ {start_date}',365)'.... –

+0

@DuduMarkovitz你能幫助我嗎? –

回答

2
set start_date=2017-02-14; 

select date_sub('${hiveconf:start_date}',i) 
from (select 1 as n) dummy lateral view posexplode(split(space(364),' ')) p as i,x 
; 

2017-02-14 
2017-02-13 
2017-02-12 
2017-02-11 
2017-02-10 
. 
. 
. 
2016-02-20 
2016-02-19 
2016-02-18 
2016-02-17 
2016-02-16 
+0

從start_date到一年前的最佳表示是什麼?我的意思是在這種情況下你會怎麼做。? –

+1

2016-02-15怎麼樣(2017-02-14)?但這是另一個帖子... :-) –

+0

謝謝!順便說一句,它的工作完美! –

1

使用bash測試目的的年長開始日期:

start_date="2014-02-14" 
days=$((($(date -u +%s) - $(date -ud $start_date +%s))/60/60/24)) 
((day_end = 366 + days)) 

while ((days < day_end ));do 
    date "+%Y-%m-%d" -d "$days days ago" 
    ((days++)) 
done 

結果

2014-02-14 
2014-02-13 
2014-02-12 
2014-02-11 
2014-02-10 
2014-02-09 
2014-02-08 
2014-02-07 
2014-02-06 
2014-02-05 
2014-02-04 
... 
... 
... 
2013-02-21 
2013-02-20 
2013-02-19 
2013-02-18 
2013-02-17 
2013-02-16 
2013-02-15 
2013-02-14 
+0

我得到'日期:非法時間格式 用法:日[-jnRu] [-d DST] [-r秒] [-t西] [ - v [+ | - ] val [ymwdHMS]] ... [-f fmt date | [[mm] dd] HH] MM [[cc] yy] [。ss]] [+ format]' 這個日期函數是如何工作的? –

+0

必須是一個過時的版本,我的:'日期(GNU coreutils)8.4' – klashxx

+1

是的!這可能是MAC操作系統日期UNIX上的一些問題,因爲我可以在這裏看到https://discussions.apple.com/thread/1352105?tstart=0和其他人。再次感謝! –

相關問題