2016-12-07 102 views
0

有沒有一種優雅的方式將蜂巢中的「出生日期」列轉換爲格式如「28-Mar-99」到「1999-03-28」?Hive如何將日期字符串只轉換爲日期格式?

我用下面的查詢來處理這些,它適用於2000年以後的日期,但對於2000年以前的日期,它給出NULL或20XX。

select a.d_cancel, 
     from_unixtime(unix_timestamp(a.d_cancel ,'dd-MMM-yy'), 'yyyy-MM-dd') as new_date 
from test_table a; 

    d_cancel new_date 
0 12-Apr-07 2007-04-12 
1 31-Dec-99 NULL 
2 20-Sep-98 2098-09-20 
+0

如何判斷99年3月28日是2000年之前還是之後? – jarlh

+0

爲什麼我想問這些問題呢是我需要處理的數據集中有很多日期類似這些。從我的理解到數據集,99年3月28日意味着28-Mar-1999。如果我想獲得2099年3月28日,上面的查詢應該能夠正確地得到它。 – Gavin

+2

你怎麼知道99年3月28日意味着1999年3月28日?可能你有一些認識年的規則?只要實施它們。像這樣:'當cast(substr(your_date,8,2)爲int)> $ this_year then 19 else 20以sentury'結尾的情況。注意:只有你知道你的規則。如果您的日期可能在將來和過去一樣,那麼信息已經丟失,無法恢復 – leftjoin

回答

0

您可以使用此查詢:

-- D/M/Y format (everywhere else) 
    SELECT CAST(DAY(@date) AS varchar(2)) + '/' 
    + CAST(MONTH(@date) AS varchar(2)) + '/' 
    + CAST(YEAR(@date) AS varchar(4)) 
+0

- D/M/Y格式(其他地方) SELECT CAST(DAY(@date)AS varchar(2))+' - ' + CAST(MONTH(@date)AS varchar(2))+'/' + CAST(YEAR(@date)AS varchar(4)) – MojtabaNava

0
DECLARE @Day VARCHAR(10)='28-Mar-99' 
SELECT CONVERT (DATE,@Day,126) AS ConvertedDate 

DECLARE @Day VARCHAR(10)='28-Mar-99' 
SELECT CAST (@Day AS DATE) AS ConvertedDate 
0

我也有類似的問題。我這個解決它:

select 
    if(to_date(from_unixtime(unix_timestamp(old_date_of_birth, "ddMMMyy"))) < from_unixtime(unix_timestamp()), 
      to_date(from_unixtime(unix_timestamp(old_date_of_birth, "ddMMMyy"))), 
      concat(year(to_date(from_unixtime(unix_timestamp(old_date_of_birth, "ddMMMyy"))))-100, SUBSTRING(to_date(from_unixtime(unix_timestamp(old_date_of_birth, "ddMMMyy"))),5,10)) 
     ) as new_date_of_birth 
from users 

在我的情況的日期是在DDMMMYY格式(24MAR93)和我沒有你提到的空的問題。但是,我對未來的出生日期確實存在問題。

由於這是一個遲到的答案,我假設你已經解決了這個問題,但它可能會幫助其他用戶。

相關問題