コンテンツにスキップ

日付列同士の差分計算

2 つの日付の差を数値の列にします。計算は 日付A − 日付B です。受注から出荷までの日数、登録からの経過年数を出すときに使います。

分析プロジェクトとの違い

見るところSQLビルダー分析プロジェクト
差の計算つなぎ先のデータベースに任せるnehan 側で決まっている(1 年 = 365.2425 日など)
単位年 / 月 / 日 / 時 / 分 / 秒上に加えて 時:分:秒
固定の日付と比べるできる(左右それぞれ)できる(左右それぞれ)
つなぎ先の制限Treasure Data では使えないない

入出力

ポート内容
入力データデータ
出力データデータ

設定項目

フォームの見出しの並び — 「詳細設定」 → 「日付A」 → 「日付B」 → 「単位を選択」。条件によって出ない見出しもあります。

新規列名を入力
差を入れる新しい列の名前。
固定の日付を演算する(日付A)
on にすると、列の代わりに決まった日付と比べます。
選択(日付A)必須
引かれる方の列。日付か日付時刻の列だけ選べます。
日付を入力(日付A)必須
「固定の日付を演算する」が on のときに出ます。画面には「例: 2019-01-01 10:10:00」と出ます。
固定の日付を演算する(日付B)
日付B の側にも同じものが付いています。
選択(日付B)必須
引く方の列。
日付を入力(日付B)必須
日付B を固定にしたときに出ます。
単位を選択
年(既定)/ 月 / 日 / 時 / 分 / 秒。

単位の数え方

nehan は単位の名前をそのままデータベースに渡しているだけで、数え方には手を入れていません。 そのため、同じ 2 つの日付でもつなぎ先によって答えが変わります。つなぎ先は 2 つの系統に分かれます。

系統つなぎ先組まれる形
差を分解して 1 つ取り出すPostgreSQL / Amazon RedshiftEXTRACT(単位 FROM 日付A - 日付B)
差をその単位に換算するMySQL / Snowflake / Treasure Data / SQL Server/Azure T-SQL / Google BigQuery / Amazon Athena / PrestoTIMESTAMPDIFF(単位, 日付B, 日付A) など

実際の値

日付A = 2027-06-20 15:30:45、日付B = 2026-04-01 10:00:00(どちらも日付時間の列)で測った値です。

単位PostgreSQL / Amazon RedshiftMySQL ほか
年01
月014
日445445
時510,685
分30641,130
秒4538,467,845

日付A が古いと、結果はマイナスになります。

組まれた SQL はSQLプレビューで確かめられます。

つなぎ先による違い

つなぎ先使えるか
Treasure Data日付列の操作のメニューごと出ません
そのほか使えます

生成される SQL

PostgreSQL につないで、出荷日 と 受注日(どちらも日付時間の列)の差を日で取った場合です。

SELECT "受注日", "出荷日",
EXTRACT(DAY FROM "出荷日" - "受注日") AS "リードタイム"
FROM "orders"

EXTRACT の中にあるのは引き算そのものです。 上の 2 列が日付型(時刻を持たない列)だと、この引き算が間隔ではなく整数になり、PostgreSQL が EXTRACT を解決できずに止まります。

「固定の日付を演算する」を使うと、その側が日付のリテラルに置き換わります。PostgreSQL では to_timestamp('2026-04-01', 'YYYY/MM/DD HH24:MI:SS') の形になるので、固定の日付を使う側は日付時間として扱われます。

エラーと対処

どのエラーも、設定を直してノードを実行し直せば消えます。

列が選ばれていない

日付A・日付B のどちらかで、固定の日付も列も指定していないと出ます。

列を選択してください

直し方 — 両方の側に列か固定の日付を指定してください。

上流にない列が選ばれている

前のノードで列が消えたあとに実行すると出ます。

存在しない列が選択されています

直し方 — 列を選び直してください。

入力がつながっていない

前のノードがつながっていないと出ます。

カラムが選択されていません。条件を確認してください

直し方 — 入力にノードをつないでください。

固定の日付の書き方が合っていない

入れた文字がつなぎ先の日付として読めない場合です。Snowflake / Treasure Data / MySQL では nehan が止めて次の文言を出します。

対応している日付のフォーマットは’2006-01-02’のようなフォーマットです

直し方 — 2026-04-01 のような形で入れてください。時刻まで入れるときは 2026-04-01 10:10:00 です。

よく使う例

1. リードタイムを出す

お題 — 受注から出荷までの日数を知りたい

入力 — 受注日 = 2026-04-01、出荷日 = 2026-05-15

設定 — 日付A 出荷日、日付B 受注日、単位は日

出力 — リードタイム = 44(数値)

PostgreSQL につないでいて、2 列とも日付型のときは先に列の型変更で日付時間にしてください。 そのままだと上の注意のエラーで止まります。

2. 基準日からの経過日数

お題 — 期首からの日数を見たい

入力 — 受注日(日付)

設定 — 日付A 受注日、日付B は「固定の日付を演算する」を on にして 2026-04-01

出力 — 期首からの日数

3. 滞在時間を出す

お題 — 入室と退室の間の分数

入力 — 入室時刻 = 2026-04-01 10:00:00、退室時刻 = 2026-04-01 12:30:00(いずれも日付時間)

設定 — 日付A 退室時刻、日付B 入室時刻、単位は分

出力 — MySQL などでは 150(= 2 時間 30 分)。PostgreSQL と Amazon Redshift では 30(1 時間未満の端数だけ)になります

PostgreSQL / Amazon Redshift で滞在分数がほしいときは、このノードを 2 つ置いて単位 時 と単位 分 を別々の列に出し、数値列同士の演算で 時 × 60 + 分 を作ってください(この例なら 2 × 60 + 30 = 150)。1 日を超える差があるときは単位 日 の列も足して 日 × 1440 を加えます。日 だけで取ると 1 日未満は 0 になります(この例では 0)

4. 日数から週数を出す

お題 — 何週間かかったかを見たい

入力 — 受注日 出荷日

設定 — 単位を日にして、あとに数値列同士の演算で ÷ 7 の「商」を取る

出力 — 週数

5. 日数で絞り込む

お題 — 30 日以上かかった注文を見たい

入力 — 例 1 の出力(受注日 出荷日 リードタイム)

設定 — この機能のあとに条件で行を絞り込みをつなぎ、リードタイム >= 30 にする

出力 — 遅れた注文だけ

関連