レガシー関数と推奨関数(日付構成要素を整数型で取得)

2024年3月23日テクニカルメモ

この記事では、日付フォーマットの項目(YYMDやHYYMDS等)から年や月等の構成要素を整数として抜き出す処理について、古いバージョンの関数を利用した場合と、新しいバージョンの関数を利用した場合のサンプルを記載しています。

DTPART 関数

DTPART 関数は、WebFOCUS 8.2 以降で登場した推奨関数(新しい関数)になります。

関数の使い方

DTPART(標準日付や日付時間フォーマットの日付 , 抜き出す日付構成要素)

日付構成要素 意味 データ範囲
YEAR1-9999
FISCAL_YEAR会計年度1-9999 (FY_FIRST_MONTH 設定を参照)
QUARTER四半期1-4
MONTH1-12
WEEK1-53 (WEEKFIRST 設定を参照)
DAY日付1-31
DAY_OF_YEAR1-366
WEEKDAY曜日1-7 (WEEKFIRST 設定を参照)
HOUR時間0-23
MINUTE0-59
SECOND0-59
MILLISECONDミリ秒0-999
MICROSECONDマイクロ秒0-999999

サンプルプロシジャ

標準日付項目(フォーマットはYYMD等)や日付時間項目(フォーマットはHYYMDm等のHから始まるもの)から日付構成要素を整数型で取得するDTPART関数のサンプルです。
レガシー関数では対象の日付項目のフォーマットが標準日付なのか日付時間なのかによって、別々の関数を利用しますが、推奨関数のDTPART関数ではどちらのフォーマットにも対応可能です。

SET PAGE-NUM = NOLEAD
DEFINE FILE CAR
-* サンプルデータ用一時項目
 年月日/YYMD = DT_CURRENT_DATE();
 年月日時分秒/HYYMDm = DT_CURRENT_DATETIME(MICROSECOND);
-* DTPART関数の利用サンプル
 年月日_年/I4       = DTPART(年月日      ,YEAR);
 年月日時分秒_年/I4 = DTPART(年月日時分秒,YEAR);
 年月日_日/I4       = DTPART(年月日      ,DAY);
 年月日時分秒_秒/I4 = DTPART(年月日時分秒,SECOND);
END
TABLE FILE CAR
PRINT
 COUNTRY NOPRINT
 年月日
 年月日_年       AS '年月日,年'
 年月日_日       AS '年月日,日'
 年月日時分秒
 年月日時分秒_年 AS '年月日時分秒,年'
 年月日時分秒_秒 AS '年月日時分秒,秒'
END
出力結果イメージ

DPART 関数、HPART 関数

DPART 関数や HPART 関数は、レガシー関数になります。

関数の使い方

DPART(標準日付フォーマットの日付, '抜き出す日付構成要素’ , '結果を格納する整数フォーマット’)

HPART(日付時間フォーマットの日付, '抜き出す日付構成要素’ , '結果を格納する整数フォーマット’)

日付構成要素 意味 データ範囲 HPARTDPART
YEAR1-9999
FISCAL_YEAR会計年度1-9999 (FY_FIRST_MONTH 設定を参照)×
QUARTER四半期1-4
MONTH1-12
WEEK1-53 (WEEKFIRST 設定を参照)×
DAY日付1-31
DAY_OF_YEAR1-366×
WEEKDAY曜日1-7 (WEEKFIRST 設定を参照)
HOUR時間0-23×
MINUTE0-59×
SECOND0-59×
MILLISECONDミリ秒0-999×
MICROSECONDマイクロ秒0-999999×
NANOSECONDナノ秒0-999999999×

サンプルプロシジャ

DPART関数にてYYMDフォーマットの項目から日付構成要素を取得、
HPART関数にてHYYMDmフォーマットの項目から日付構成要素を取得するサンプルです。
処理内容自体はDTPART関数と同じものです。

SET PAGE-NUM = NOLEAD
DEFINE FILE CAR
-* サンプルデータ用一時項目
 年月日/YYMD = DT_CURRENT_DATE();
 年月日時分秒/HYYMDm = DT_CURRENT_DATETIME(MICROSECOND);
-* DPART関数・HPART関数の利用サンプル
 年月日_年/I4       = DPART(年月日      ,'YEAR'  ,'I4');
 年月日時分秒_年/I4 = HPART(年月日時分秒,'YEAR'  ,'I4');
 年月日_日/I4       = DPART(年月日      ,'DAY'   ,'I4');
 年月日時分秒_秒/I4 = HPART(年月日時分秒,'SECOND','I4');
END
TABLE FILE CAR
PRINT
 COUNTRY NOPRINT
 年月日
 年月日_年       AS '年月日,年'
 年月日_日       AS '年月日,日'
 年月日時分秒
 年月日時分秒_年 AS '年月日時分秒,年'
 年月日時分秒_秒 AS '年月日時分秒,秒'
END

結果イメージは、上図のDTPART関数の結果と同じです。