hive如何将一年中只有最后两位的日期字符串转换成日期格式?

quhf5bfb  于 2021-06-28  发布在  Hive
关注(0)|答案(3)|浏览(488)

有没有一种优雅的方法可以将hive中格式为“1999年3月28日”的“出生日期”列转换为“1999年3月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
tktrz96b

tktrz96b1#

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
gzszwxb4

gzszwxb42#

我也有类似的问题。我用这个来解决它:

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(1993年3月24日),我没有你提到的空值的问题。但我确实对未来的出生日期有意见。
因为这是一个迟来的答案,我想你已经解决了这个问题,但它可能会帮助其他用户。

lpwwtiir

lpwwtiir3#

您可以使用此查询:

-- 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))

相关问题