SPSS ModelerのCLEM式でよく使う「日付と時刻」関数

SPSS Modeler 18.5に新しい「日付と時刻」関数が追加されました。『ある日付や時刻のxx日後やzz分後を作成したい場合』を更新しました。

SPSS ModelerのCLEM式でよく使う「日付と時刻」の関数を取り上げました。ここでは、SPSS Modeler18.2.2のフィールド作成ノードを使用しています。

# ストリームの実行日を基準日として利用したい場合
##### ＠TODAY
##### datetime_now
たとえば、生年月日の情報からストリーム実行時の年齢を得たいとします。
その場合、2種類の関数を使うことができます。
図では、わかりやすいように「実行日_xxx」フィールドを作成していますが、実際にはこのフィールドの作成は不要です。

①　＠TODAY
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/0646ea8f-2dcf-206b-c0b7-b89ccf285c1c.png)
②　datetime＿now
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/4c93d19b-837a-f3f0-d444-587e06693c4b.png)

得られる結果は同じなのでどちらを使ってもよいのですが、SQLプッシュバック機能を活用する際には、頭文字に＠が付く関数はSPSS Modelerの特殊関数のため利用範囲が制限される場合があることから②の利用が推奨されます。

# 日付や時刻の差を求めたい場合
##### date_{A}_ difference(DATE1, DATE2)  A = years, months, weeks, days
##### time_{A}_ difference(TIME1, TIME2)   A = secs, mins, hours
たとえば、調査開始日(日付1)から終了日(日付2)までの期間を日数で得たいとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/654c9265-52b7-6588-e4a5-a19b43b142f7.png)

# 日付や時刻を年,月,日や時,分,秒に分解したい場合
##### datetime_{A}(TIME)   A = years, months, days, weekday, secs, mins, hours
たとえば、生年月日から生まれ年、生まれ月、生まれた日に加えて生まれた曜日を得たいとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/99249c60-73c0-d9f2-5de7-793517a14934.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/297eb094-d8fe-2b58-86be-fa343390e01a.png)

※　生まれた曜日は、1が日曜日です。値ラベルをつけるとよりわかりやすくすることができます。

# 個別の年,月,日,時,分,秒を日付や時刻に統合したい場合
##### datetime_date(YEAR, MONTH, DAY)
##### datetime_time(HOUR, MINUTE, SECOND) 
##### datetime_timestamp(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)
##### datetime_timestamp(DATE, TIME)
たとえば、生まれ年、生まれ月、生まれた日から生年月日を得たいとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/473c44bd-812c-5682-4a04-f7f30f89d8c4.png)

# ストレージを日付や時刻に変更したい場合
##### to_date(ITEM)
##### to_time(ITEM)
##### to_datetime(ITEM)
##### to_timestamp(ITEM)
たとえば、２つの日付情報から期間を得るためにはデータのストレージを日付や時刻、タイムスタンプにしておく必要があります。

# 0時からの経過時間を求めたい場合
##### time_in_{A}   A = secs, mins, hours
たとえば、0時からの経過時間を分単位で得たいとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/fa4e7a19-de1e-e5e3-6b5d-76f67da3d678.png)

# 2つの日付や時刻を比較して前後を判別したい場合
##### date_before(DATE1,DATE2)
##### time_before(TIME1, TIME2)
たとえば、保守継続予定日(日付1)が保守満了日(日付2)より前日かどうかを得たいとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/3ebf35ba-f1a3-c4e4-f76d-14c17ec2f072.png)

# ある日付や時刻のxx日後やzz分後を作成したい場合
たとえば、誕生日から100日後の日付を得たいとします。

### v18.5
##### date_add_{A}(NUM,TIME)      A = days,weeks, months, years
##### date_add_{A}(NUM,TIMESTAMP) A = days,weeks, months, years
##### time_add_{A}(NUM,TIME)      A = seconds, minutes, hours
##### time_add_{A}(NUM,TIMESTAMP) A = seconds, minutes, hours

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/b324c6a5-69e4-83d8-c024-a55564e79251.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/d702e51f-2e65-f1cc-ede7-2806dd09780d.png)

閏年も加味されて日付が出力されます。

### v18.4まで
##### date_in_{A}(DATE) A = days, months, years 
##### time_in_{A}(TIME) A = secs, mins, hours
##### datetime_{A}(ITEM) A = date, time, timestamp


この場合、いくつか方法はありますが今回は次の手順で進めます。
①誕生日のストリーム基準日(デフォルト1900年1月1日)からの経過日数を求めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/b580a0f6-1e1c-b946-a98e-82e276709190.png)
②①で求めた基準日からの経過日数を経過秒数に単位を変えて求めます。
日数×1日:24時間×1時間:60分×1分:60秒
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/b31aa5f2-d110-8355-c8c6-523628560cf0.png)
③②で求めた基準日からの経過秒数を日付に変えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/8ecb25e6-63f0-62be-e146-fae4b3835548.png)
①〜③をまとめて1つの式で表すこともできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855260/187cd065-18a6-1c24-e31f-4d9b6bb0cc4e.png)

＜時間の例＞
https://www.ibm.com/support/pages/clem%E5%BC%8F%E3%81%A730%E5%88%86%E5%BE%8C%E3%81%AE%E6%99%82%E9%96%93%E3%82%92%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

# まとめ
よく使う日付と時刻の関数はここまでで、次は文字列関数のご紹介を予定しています。
SPSS Modeler活用にお役立ていただければ幸いです。