【问题标题】:How to convert a date format YYYY-MM-DD into integer YYYYMMDD in Presto/Hive?如何在 Presto/Hive 中将日期格式 YYYY-MM-DD 转换为整数 YYYYMMDD?
【发布时间】:2018-04-28 02:47:06
【问题描述】:

如何在 Presto/Hive 中将 YYYY-MM-DD 格式的日期 CONVERT 转换为整数 YYYYMMDD

我正在尝试将以下列表转换为 YYYYMMDD 整数

WITH  all_dates  as (SELECT
    CAST(date_column AS DATE) date_column
FROM
    (VALUES
        (SEQUENCE(FROM_ISO8601_DATE('2017-07-01'),
                  FROM_ISO8601_DATE('2017-11-15'),
                  INTERVAL '1' DAY)
        )
    ) AS t1(date_array)
CROSS JOIN
    UNNEST(date_array) AS t2(date_column)
    )

我尝试了类似的方法,但它不起作用

   SELECT
   CAST(
      CAST(year(date_column) AS VARCHAR(4)) +
      right('0' + CAST(month(date_column) AS VARCHAR(2)), 2) +
      right('0' + CAST(day(date_column) AS VARCHAR(2)), 2) 
   AS DATETIME)
   FROM all_dates

【问题讨论】:

    标签: sql date hadoop hive presto


    【解决方案1】:

    你也可以使用date_format函数:

    hive> select cast(date_format('2017-07-01','yyyyMMdd') as int);
    OK
    20170701
    

    【讨论】:

      【解决方案2】:

      如果您只需要将日期 YYYY-MM-DD 转换为整数 YYYYMMDD,为什么不尝试先删除所有出现的 "-"在使用类似这样的方法将结果转换为 int 之前,从日期的字符串表示形式?

      cast(regexp_replace(str_column,'-','') as int)
      

      【讨论】:

        【解决方案3】:

        只需将REPLACE '-' 与空字符串和CAST 转换为INT

        尝试以下方法:

        SELECT CAST(REPLACE(Date_Column,'-','') AS INT)
        

        【讨论】:

          【解决方案4】:

          您确定要使用 YYYYMMDD 吗? Hive 遵循 Java 日期格式约定和https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html 您可以看到 YYYY 代表周年,这意味着您可能会在年末日期遇到麻烦。 2019 年可能会显示为 2020 年。

          请改用yyyyMMdd

          @leftjoin 可能有正确的响应。

          beeline> select cast(date_format('2019-07-01','yyyyMMdd') as int);
          OK
          20190701
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多