web-dev-qa-db-ja.com

ハイブが日付dd-MM-yyyyに文字列をキャストします

「dd-MM-yyyy」形式の文字列を、Hiveの「dd-MM-yyyy」形式の日付型にキャストするにはどうすればよいですか?

以下の線に沿ったもの:

CAST('12-03-2010' as date 'dd-mm-yyyy')
20
pele88

試してください:

from_unixtime(unix_timestamp('12-03-2010' , 'dd-MM-yyyy'))
32
Ardit

私がそれを正しく理解していれば、特定の日付を表す文字列を別の型に変換しようとしています。

注:(@Samson Scharfrichterが言及したように)

  • 日付のデフォルト表現はISO8601です
  • 日付は(文字列としてではなく)バイナリに保存されます

いくつかの方法があります。そして、あなたは解決策に近づいています。 CAST(DATE_TYPEに変換)を使用します。

SELECT cast('2018-06-05' as date); 

結果:2018-06-05 DATE_TYPE

または(パターンに応じて)

select cast(to_date(from_unixtime(unix_timestamp('05-06-2018', 'dd-MM-yyyy'))) as date)

結果:2018-06-05 DATE_TYPE

そして、ISO8601を日付型に変換することにした場合:

select cast(to_date(from_unixtime(unix_timestamp(regexp_replace('2018-06-05T08:02:59Z', 'T',' ')))) as date);

結果:2018-06-05 DATE_TYPE

Hiveには独自の関数があります。これらの日付関数およびキャスト関数の説明のために、いくつかの例を作成しました。

日付とタイムスタンプ関数の例:

文字列/タイムスタンプ/日付の変換日付へ

SELECT cast(date_format('2018-06-05 15:25:42.23','yyyy-MM-dd') as date); -- 2018-06-05 DATE_TYPE
SELECT cast(date_format(current_date(),'yyyy-MM-dd') as date); -- 2018-06-05 DATE_TYPE
SELECT cast(date_format(current_timestamp(),'yyyy-MM-dd') as date);  -- 2018-06-05 DATE_TYPE

文字列/タイムスタンプ/日付の変換to BIGINT_TYPE

SELECT to_unix_timestamp('2018/06/05 15:25:42.23','yyyy/MM/dd HH:mm:ss'); -- 1528205142 BIGINT_TYPE
SELECT to_unix_timestamp(current_date(),'yyyy/MM/dd HH:mm:ss'); -- 1528205000 BIGINT_TYPE
SELECT to_unix_timestamp(current_timestamp(),'yyyy/MM/dd HH:mm:ss'); -- 1528205142 BIGINT_TYPE

文字列/タイムスタンプ/日付の変換STRINGに

SELECT date_format('2018-06-05 15:25:42.23','yyyy-MM-dd'); -- 2018-06-05 STRING_TYPE
SELECT date_format(current_timestamp(),'yyyy-MM-dd'); -- 2018-06-05 STRING_TYPE
SELECT date_format(current_date(),'yyyy-MM-dd'); -- 2018-06-05 STRING_TYPE

BIGINT unixtimeを変換STRINGに

SELECT to_date(from_unixtime(unixtime,'yyyy/MM/dd HH:mm:ss')); -- 2018-06-05 STRING_TYPE

文字列の変換BIGINTへ unixtime

SELECT unix_timestamp('2018-06-05 15:25:42.23','yyyy-MM-dd') as TIMESTAMP; -- 1528149600 BIGINT_TYPE

文字列の変換TIMESTAMPへ

SELECT cast(unix_timestamp('2018-06-05 15:25:42.23','yyyy-MM-dd') as TIMESTAMP); -- 1528149600 TIMESTAMP_TYPE

べき等(文字列->文字列)

SELECT from_unixtime(to_unix_timestamp('2018/06/05 15:25:42.23','yyyy/MM/dd HH:mm:ss')); -- 2018-06-05 15:25:42 STRING_TYPE

べき等(日付->日付)

SELECT cast(current_date() as date); -- 2018-06-26 DATE_TYPE

現在の日付/タイムスタンプ

SELECT current_date(); -- 2018-06-26 DATE_TYPE
SELECT current_timestamp(); -- 2018-06-26 14:03:38.285 TIMESTAMP_TYPE
10
KeyMaker00

私の知る限り、StringをISO形式で再フォーマットして、Date

cast(concat(substr(STR_DMY,7,4), '-',
            substr(STR_DMY,1,2), '-',
            substr(STR_DMY,4,2)
           )
     as date
     ) as DT

Dateを特定の形式のStringとして表示するには、 Hive 1.2以降があり、date_format()を使用できる場合を除き、他の方法

=>あなたは ドキュメントを確認 ところでしたか?

テーブルに文字列形式の列「birth_day」があるとします。次のクエリを使用して、birth_dayを使用してフィルタリングする必要があります。

date_Format(birth_day, 'yyyy-MM-dd')

次の方法でクエリで使用できます

select * from yourtable
where 
date_Format(birth_day, 'yyyy-MM-dd') = '2019-04-16';
1
Terminator17