Как преобразовать формат даты YYYY-MM-DD в целое число YYYYMMDD в Presto/Hive?

Как CONVERT дата в формате YYYY-MM-DD в целое число 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

3 ответа

Решение

Если вам просто нужно преобразовать дату YYYY-MM-DD в целое число YYYYMMDD, почему бы вам не попробовать сначала удалить все вхождения "-" из строкового представления вашей даты перед приведением результата к int, используя что-то вроде этого?

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

Также вы можете использовать date_format функция:

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

Просто REPLACE '-' с пустой строкой и CAST это в INT,

Попробуйте следующее:

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

Вы уверены, что хотите использовать 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
Другие вопросы по тегам