web-dev-qa-db-ja.com

Presto / Hiveで日付形式YYYY-MM-DDを整数YYYYMMDDに変換するにはどうすればよいですか?

Presto/HiveでYYYY-MM-DD形式の日付を整数CONVERTYYYYMMDDする方法は?

以下のリストを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
6
Chris

日付を変換する必要がある場合YYYY-MM-DD整数に[〜#〜] yyyymmdd [〜#〜]最初に削除してみませんかこのようなものを使用して結果をintにキャストする前の、日付の文字列表現からの"-"のすべての出現?

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

また、date_format関数を使用することもできます。

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

空の文字列を含む「-」をREPLACEし、CASTINTに入れます。

次のことを試してください。

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

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
0
Piyush Patel