Hive如何将仅包含年份的两位数的日期字符串转换为日期格式?

时间:2016-12-07 08:43:31

标签: sql hive

是否有一种优雅的方式来转换出生日期"列格式为" 28-Mar-99"到" 1999-03-28"在蜂巢中?

我使用下面的查询来处理这些问题,它适用于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

3 个答案:

答案 0 :(得分: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))

答案 1 :(得分: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

答案 2 :(得分: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),我没有提到你的null问题。但我确实有未来出生日期的问题。

由于这是一个迟到的答案,我认为你已经解决了问题,但它可能会帮助其他用户。