本文へスキップ
martechfarmDATA & TECHNOLOGY DOCS

すべての記事のタイトル・本文を検索

すべての記事

127 件

タイトルを選ぶと本文が開きます

連続購買をSQLで分析する方法|何ヶ月買い続けているかを判定するクエリ

顧客名寄せをSQLで行う方法|重複IDを統合する実務クエリ

Treasure Data SQLでN日前・N日後の日付を計算する方法

Treasure Data SQLで日付差分を計算する方法|日数・時間数の出し方

Treasure Data SQLで先月・今月の月初月末を取得する方法

Treasure Data SQLで今日の日付・現在時刻を取得する方法

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

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

Treasure Data SQLで整数8桁の日付をUNIXタイムに変換する方法

異常値・重複データをSQLで検知する方法|データ品質チェックの実務クエリ

クーポン施策の効果をSQLで検証する方法|割引の売上貢献を正しく測る

メルマガの購買転換率をSQLで計測する方法|配信効果を可視化するクエリ

前年同月比・前月比をSQLで計算する方法|売上推移を同時比較するクエリ

バスケット分析をSQLで行う方法|一緒に買われる商品を見つけるクエリ

ABC分析をSQLで実装する方法|売上上位80%の商品を抽出するクエリ

コホート分析をSQLで行う方法|月次リテンション率を可視化するクエリ

新規・既存・復活・休眠顧客をSQLで自動判定する方法

LTVをSQLで計算する方法|顧客生涯価値を正確に出す実務クエリ

RFM分析をSQLだけで実装する方法|顧客ランクを自動分類する実務クエリ

Treasure Data CJOでジャーニーが更新されない原因と確認ポイント

Treasure Data CJOの処理完了を確認する方法|ジョブ状態と実行結果の見方

ポケモン殿堂入りに学ぶ出口戦略|キャリアと事業のゴール設計

ポケモン交換に学ぶ市場原理|需要と供給・ネットワーク効果のビジネス論

ミュウに学ぶ希少性マーケティング|限定性が価値を生む経済学

本文
記事一覧へ ↑

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_parseとto_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
%i分30
%s秒00
-- スラッシュ区切りの場合
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形式を使う

MarTech Farmをもっと見る

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

続きを読む