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

时间:2017-11-15 01:16:45

标签: sql date hadoop hive presto

如何将CONVERT格式为YYYY-MM-DD的日期转换为Presto / Hive中的整数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

4 个答案:

答案 0 :(得分:5)

您也可以使用date_format功能:

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

答案 1 :(得分:2)

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

"-"

答案 2 :(得分:2)

只需REPLACE使用空字符串' - '并将CAST添加到INT

尝试以下方法:

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

答案 3 :(得分:0)

确定要使用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