IBM i (AS/400)の物理ファイルには日付型のフィールドはないので、日付は数値フィールドに保存していることが多いだろう。また、日付は「250131」のように6桁のYYMMDD形式か、「20250131」のように8桁のYYYYMMDD形式のどちらかで保存していることが多いだろう。
この記事では、6桁の日付を8桁に変換する方法を紹介する。なお、この方法はRPGⅢでは使えないので注意。
変換例
6桁の数値フィールド「DATE6」の日付を8桁の数値フィールド「DATE8」に入れるには、以下のように書く。
DATE8 = %DEC(%DATE(DATE6:*YMD))
解説
%DATE関数と%DEC関数を使用する。
%DATE関数
%DATE関数を使うと、数値や文字を日付に変換できる。数値フィールド「DATE6」を*YMD形式の日付に変換するには、以下のようにコロンの後に*YMDと書く。
%DATE(DATE6:*YMD)
例えばDATE6の値が「250131」だと、「2025-01-31」と変換される。確かにこれで8桁に変換できたが、これは数値ではないので数値フィールドに入れることはできない。
%DEC関数
%DEC関数を使うと、日付を数値に変換できる。
%DEC(%DATE(DATE6:*YMD))
余談
6桁の日付を8桁に変換する際に、「6桁の日付に20000000を足して8桁にする」というかなり強引なやり方をしているプログラムをよく見かけた。これが一般的なのかどうかは全然分からないが…。
参考文献
この記事の内容は、以下の公式サイトを参考にした。