【问题标题】:convert year and month as date format in hive在 hive 中将年月转换为日期格式
【发布时间】:2021-06-15 17:35:48
【问题描述】:

我的年月格式如下。年和月是列名

Year  Month
2020  January
2019  October

并希望将它们转换为以下格式

01-01-2020
01-10-2019

我尝试过使用

cast(concat('01-',substring(month,1,3),'-',year) as timestamp) as Date_col

但无法使其工作。非常感谢您的帮助。谢谢!!

【问题讨论】:

    标签: sql date hive timestamp hiveql


    【解决方案1】:

    在 SQL Server 中,您可以通过使用 DATEPARTFORMAT 来实现此目的:

    SELECT CONCAT('01-', FORMAT(DATEPART(MM, [Month] + ' 01 ' + [Year]), '0#'), '-', [Year]) AS Date_col
    FROM yourTable
    

    【讨论】:

      【解决方案2】:

      您正在尝试将01-Jan-2019 转换为时间戳,但即使它有效,Hive 中的时间戳也不是必需的格式:dd-MM-yyyy。时间戳的格式为:'yyyy-MM-dd HH:mm:ss.SSSSSSSSS'(纳秒是可选的)。

      unix_timestamp 函数将给定格式字符串转换为以秒为单位的 unix 时间戳,from_unix_time 将 unix 时间戳转换为给定格式。

      使用from_unixtime(unix_timestamp(concat('01-',month,'-',year),'dd-MMM-yyyy'),'dd-MM-yyyy')'dd-MMM-yyyy' 转换为'dd-MM-yyyy'

      演示:

      with 
      your_data as (
      select stack(2, 
      2020, 'January',
      2019, 'October'
              ) as ( Year, Month)
      )
      select Year, Month, from_unixtime(unix_timestamp(concat('01-',month,'-',year),'dd-MMM-yyyy'),'dd-MM-yyyy')  as Date_col
      from your_data
      ;
      

      结果:

      year    month     date_col
      2020    January   01-01-2020
      2019    October   01-10-2019
      

      这也可以(不与01- 连接,使用“MMM-yyyy”格式):

      from_unixtime(unix_timestamp(concat(month,'-',year),'MMM-yyyy'),'dd-MM-yyyy')
      

      如果你想转换为真正的时间戳,也可以不指定输出格式:

      from_unixtime(unix_timestamp(concat(month,'-',year),'MMM-yyyy')) --returns 2020-01-01 00:00:00
      

      使用SimpleDateFormat 类文档作为格式参考

      【讨论】:

      • 仍将 Date_col 设为 null。年月列是字符串日期类型
      • @sadashiva 我的例子如果复制粘贴也不起作用?
      • 这对我有用... from_unixtime(unix_timestamp(concat('01-', substring(month,1,3), '-', year), 'dd-MMM-yy') ,'yyyy-MM-dd')
      • @sadashiva 你有 2 位数的年份?在问题中它是4位数字。我认为区别就在于此。 MMM 像 1 月一样工作整整一个月
      猜你喜欢
      • 2015-04-29
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多