2015-04-30 22 views
0

我使用的是Hive(與SQL類似,但SQL用戶的語法可能有點不同)。我已經看過另一個stackoverflow,但他們似乎是在SQL中使用不同的語法。在HIVE中選擇月份的第一天

我正試圖通過此查詢來獲取本月的第一天。這一個給我今天的一天。例如,如果今天是2015-04-30,那麼結果將是2015-04-01。謝謝!

select 
    cust_id, 
    FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') as first_day_of_month_transaction 
--DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) as first_day_of_month_transaction --SQL format. Not compatible in Hive. 
from 
    customers; 

回答

3

要獲得該月的第一天,你可以使用:

date_add(<date>, 
     1 - day(<date>)) 

應用到你的表情:

date_add(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'), 
     1 - day(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')) 
     ) 

但是,這將任何列在正確的格式工作。

+0

這實際上是給我2015-05-29。不是月份的第一天 – sharp

+0

@sharp。 。 。我修正了這一點。該函數應該是'date_sub()'或符號反轉。 –

+0

感謝它現在的作品。我沒有在查詢中的任何地方使用date_sub()。我完全從上面使用。 – sharp

1

SELECT TRUNC(rpt.statement_date,'MM')會給你一個月的第一天。

+0

這是一個更簡單的解決方案 –

0

另一種方式 - select concat(substring(current_date,1,7),'-01');

相關問題