本文へ移動
SQL 更新日: 2026年5月2日 約6分で読めます

Treasure Data SQLで日付文字列をUNIXタイムに変換する方法

対応エンジン

エンジン対応備考
TD(Presto)TD_TIME_PARSEはTD固有関数
Trino / Presto⚠️to_unixtime + date_parseを使う
Hive⚠️unix_timestampを使う

こんなときに使う

外部システムから取り込んだデータや手動で作成したマスタテーブルに'2024-01-01'のような文字列で日付が入っているケースがあります。TD_TIME_RANGEでの絞り込みや日付計算に使うためにUNIXタイムに変換したい場面で使います。


TDでの実装

入力例:'2024-01-01'
出力例:1704034800

SELECT
  TD_TIME_PARSE('2024-01-01', 'Asia/Tokyo') AS unix_time

いろいろな文字列フォーマットに対応できる

-- ハイフン区切り(最も一般的)
TD_TIME_PARSE('2024-01-01', 'Asia/Tokyo')
-- → 1704034800

-- スラッシュ区切り
TD_TIME_PARSE('2024/01/01', 'Asia/Tokyo')
-- → 1704034800

-- 日時込み
TD_TIME_PARSE('2024-01-01 09:00:00', 'Asia/Tokyo')
-- → 1704067200

カラムに入っている文字列を変換する

SELECT
  TD_TIME_PARSE(date_col, 'Asia/Tokyo') AS unix_time
FROM your_table

Trino / Prestoでの実装

TD_TIME_PARSEは使えないため、date_parseto_unixtimeを組み合わせます。

SELECT
  to_unixtime(
    date_parse(date_col, '%Y-%m-%d')
    AT TIME ZONE 'Asia/Tokyo'
  ) AS unix_time
FROM your_table

date_parseで文字列をTIMESTAMP型に変換してからto_unixtimeでUNIXタイムに変換します。
フォーマット文字列はTDと異なり%Y-%m-%d形式を使います。

Trino/Prestoのフォーマット記号

記号意味
%Y年(4桁)2024
%m月(2桁)01
%d日(2桁)01
%H時(24時間)09
%i30
%s00
-- スラッシュ区切りの場合
to_unixtime(
  date_parse(date_col, '%Y/%m/%d')
  AT TIME ZONE 'Asia/Tokyo'
)

-- 日時込みの場合
to_unixtime(
  date_parse(date_col, '%Y-%m-%d %H:%i:%s')
  AT TIME ZONE 'Asia/Tokyo'
)

Hiveでの実装

SELECT
  unix_timestamp(date_col, 'yyyy-MM-dd') AS unix_time
FROM your_table

unix_timestamp(文字列, フォーマット)で日付文字列をUNIXタイムに変換します。
タイムゾーンはHiveのセッション設定に依存します。

-- スラッシュ区切りの場合
unix_timestamp(date_col, 'yyyy/MM/dd')

-- 日時込みの場合
unix_timestamp(date_col, 'yyyy-MM-dd HH:mm:ss')

エンジン別まとめ

エンジン関数タイムゾーン指定
TDTD_TIME_PARSE(date_col, timezone)第2引数に指定
Trino / Prestoto_unixtime(date_parse(...) AT TIME ZONE ...)AT TIME ZONEで指定
Hiveunix_timestamp(date_col, format)セッション設定に依存

⚠️ よくあるミス

8桁文字列をそのまま渡す

-- ❌ ハイフンなしはNULLになる
TD_TIME_PARSE('20240101', 'Asia/Tokyo')

-- ✅ SUBSTR+CONCATでハイフン区切りにしてから渡す
TD_TIME_PARSE(
  CONCAT(
    SUBSTR('20240101', 1, 4), '-',
    SUBSTR('20240101', 5, 2), '-',
    SUBSTR('20240101', 7, 2)
  ),
  'Asia/Tokyo'
)
-- → 詳しくは[日付]整数8桁をUNIXタイムに変換する方法を参照

タイムゾーンを省略する

-- ❌ UTCで解釈されてしまい9時間ずれる
TD_TIME_PARSE('2024-01-01')

-- ✅ 必ずAsia/Tokyoを指定
TD_TIME_PARSE('2024-01-01', 'Asia/Tokyo')

よくある応用:文字列の日付カラムで期間を絞り込む

SELECT *
FROM your_table
WHERE TD_TIME_RANGE(
  time,
  TD_TIME_PARSE('2024-01-01', 'Asia/Tokyo'),
  TD_TIME_PARSE('2024-02-01', 'Asia/Tokyo')
)

まとめ

ポイント内容
TD基本形TD_TIME_PARSE(date_col, 'Asia/Tokyo')
タイムゾーン必須省略するとUTCで9時間ずれる
8桁文字列は直接NG事前にハイフン区切りの文字列に変換する
Trinoはフォーマット記号が異なるyyyyではなく%Y形式を使う

次のアクション

SQLやデータ活用を、手元で試しながら理解する

記事で読んだ考え方を、SQL練習場や関連カテゴリの記事でさらに深掘りできます。相談やご依頼もお問い合わせページから受け付けています。

SQL練習場で試す お問い合わせ

この記事を書いた人:martechfarm

Treasure Data Top Lapidarist Award受賞。

SQL / Digdag / Python / CDP設計 / CRM設計を横断し、企業のデータ活用を支援。

実績・支援内容を見る →

MarTech Farmをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む