日付列同士の差分計算
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 Redshift | EXTRACT(単位 FROM 日付A - 日付B) |
| 差をその単位に換算する | MySQL / Snowflake / Treasure Data / SQL Server/Azure T-SQL / Google BigQuery / Amazon Athena / Presto | TIMESTAMPDIFF(単位, 日付B, 日付A) など |
実際の値
日付A = 2027-06-20 15:30:45、日付B = 2026-04-01 10:00:00(どちらも日付時間の列)で測った値です。
| 単位 | PostgreSQL / Amazon Redshift | MySQL ほか |
|---|---|---|
| 年 | 0 | 1 |
| 月 | 0 | 14 |
| 日 | 445 | 445 |
| 時 | 5 | 10,685 |
| 分 | 30 | 641,130 |
| 秒 | 45 | 38,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 にする
出力 — 遅れた注文だけ