これは InterSystems FAQ サイトの記事です。
ObjectScript で日付の比較を行う場合、一旦 $HOROLOG 形式(内部数値)に変換することで算出しやすくなりますが、SQL 関数を利用して算出することもできます。
ObjectScript から SQL 関数を実行するには、%SYSTEM.SQL.Functions クラスを使用します。
※ 2021.1以前のバージョンでは、%SYSTEM.SQL クラスを使用します。
%SYSTEM パッケージは、システム・オブジェクトと呼ばれ ObjectScript では $SYSTEM 特殊変数を利用して以下の構文で実行します。
$SYSTEM.サブパッケージ名.クラス名.メソッド名() または $SYSTEM.クラス名.メソッド名()
以下、SQL 関数 DATEDIFF を使用して日付の比較を行う例です。
USER>write $system.SQL.Functions.DATEDIFF("dd","2025-01-20","2025-03-20")
59
分での比較
USER>write $system.SQL.Functions.DATEDIFF("mi","2025-01-20","2025-03-20")
84960
秒での比較
USER>write $system.SQL.Functions.DATEDIFF("ss","2025-01-20","2025-03-20")
5097600
この他、DATEADD 関数を使って指定日付に日付や時刻を追加することもできます。
指定の日付に10年追加する
USER>write $system.SQL.Functions.DATEADD("year",10,"2025-01-20")
2035-01-20 00:00:00
指定の日付の25日前
USER>write $system.SQL.Functions.DATEADD("day",-25,"2025-01-20")
2024-12-26 00:00:00
指定日時の16時間前
USER>write $system.SQL.Functions.DATEADD("hour",-16,"2025-01-20 13:10:00")
2025-01-19 21:10:00
指定の日付時刻の指定箇所のみを取り出す DATEPART 関数の実行例は以下の通りです。
hour を取り出す
USER>write $system.SQL.Functions.DATEPART("hour","2025-01-20 13:10:00")
13
dayofyear を返す
USER>write $system.SQL.Functions.DATEPART("dayofyear","2025-10-20 13:10:00")
293
dayを返す
USER>write $system.SQL.Functions.DATEPART("day","2025-10-20 13:10:00")
20
この他のSQL関数については、ドキュメントをご参照ください。