如何在presto/hive中将日期格式yyyy-mm-dd转换为整数yyyyymmdd?

ncgqoxb0  于 2021-06-02  发布在  Hadoop
关注(0)|答案(4)|浏览(543)

如何 CONVERT 格式的日期 YYYY-MM-DD 转换为整数 YYYYMMDD 在presto/hive?
我正在尝试将下面的列表转换为 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
vohkndzv

vohkndzv1#

如果您只需要将日期yyyy-mm-dd转换为整数yyyymmdd,为什么不先删除所有出现的 "-" 在将结果转换为int之前,从日期的字符串表示中使用以下内容?

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

sg3maiej2#

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

x8goxv8g3#

你也可以用 date_format 功能:

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

tyg4sfes4#

简单 REPLACE 带空字符串和 CAST 把它变成 INT .
请尝试以下操作:

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

相关问题