テキストの日付がバラバラで困る…そんなときの「GetAsDate」
日付を入力するフィールドをテキスト型で作ってしまい、
「2024/1/5」「2024-01-05」「2024年1月5日」など、
人によってバラバラの書き方になってしまうことはないでしょうか。
見た目は何となく合っていても、このままではソートや検索、集計で思った通りに動いてくれません。
そんな「バラバラなテキスト日付」を「きちんとした日付」として扱えるようにしてくれるのが、GetAsDate 関数です。
GetAsDateとは?ざっくりイメージをつかむ
GetAsDate ( テキスト ) は、テキストとして保存されている「日付らしい文字列」を、
FileMaker が理解できる「日付データ」に変換するための関数です。
例えば、次のようなテキストは、多くの場合そのまま日付として解釈してくれます。
2024/01/052024-1-52024年1月5日1/5/2024(システムの書式設定による)
ポイントは、「文字として保存されていた日付」を「日付型」に変えることで、
日付の大小比較・期間検索・ソート・計算が正しく使えるようになる、という点です。
基本の使い方:テキストフィールドを日付フィールドに変換する
もっともシンプルな使い方は、テキストフィールドから日付フィールドへ値を移し替える方法です。
- 元のテキストフィールド(例:
テキスト日付)を確認する - 新しく「日付」タイプのフィールド(例:
日付_正規化)を作成する - レイアウトに
日付_正規化を配置する - スクリプトで、次のようなステップを使う
Set Field [ テーブル::日付_正規化 ; GetAsDate ( テーブル::テキスト日付 ) ]
こうすることで、「テキストとして保存されている日付」が、
FileMaker が理解できる正式な日付データに変わります。
一度日付型として保存してしまえば、後は通常の「日付フィールド」と同じように扱えます。
入力時に自動で正規化する方法(自動入力計算)
「毎回スクリプトを走らせるのは面倒」という場合は、
フィールドの 自動入力計算 を使って、入力時に自動で正規化する方法がおすすめです。
- 「日付_正規化」フィールドのオプションを開く
- 「自動入力」タブで「計算値」を選ぶ
- 計算式に次を指定する
GetAsDate ( テーブル::テキスト日付 ) - 必要に応じて「既存の値を置き換えない」のチェックを調整
こうしておけば、ユーザーが「テキスト日付」フィールドに入力したタイミングで、
裏側で自動的に正規化された日付が「日付_正規化」に入ります。
ユーザーはこれまで通り入力するだけで、開発側は日付として安全に扱えるようになります。
よくあるパターンと注意点
GetAsDate は便利ですが、万能ではありません。
テキストの書き方や、OSの地域設定によって、結果が変わるケースがあります。
そのまま通りやすいパターン
2024/01/05のように「西暦/2桁月/2桁日」2024-1-5のように、区切り記号が/ではなくても、並びが「年-月-日」2024年1月5日のように、日本語の「年」「月」「日」がついた表記
気をつけたいパターン
1/5/24のように「日付なのか月なのか」あいまいな並び2024.1.5のようにドット区切り(環境によって解釈が変わることがあります)20240105のように区切り記号なし(そのままだと日付と認識されないことが多い)
このような書式が混ざっている場合は、
あらかじめ Substitute 関数などで区切りを追加・揃える と、より安全に変換できます。
一歩進んだ使い方:書式を整えてからGetAsDate
区切りなしの数字8桁(20240105)のような形式を扱う場合は、
次のように「いったんきちんとした書式に直してから」GetAsDate に渡すと安定します。
例:テキスト日付 に 20240105 が入っていると想定します。
// YYYYMMDD を YYYY/MM/DD に変換してから日付化
GetAsDate (
Left ( テーブル::テキスト日付 ; 4 ) & "/" &
Middle ( テーブル::テキスト日付 ; 5 ; 2 ) & "/" &
Right ( テーブル::テキスト日付 ; 2 )
)
このように、まず 「年」「月」「日」を切り分けて、標準的な書式に組み立て直す ことで、
GetAsDate が正しく変換してくれる可能性が高まります。
変換できない場合のエラー対策
テキストがどうしても日付として解釈できない場合、
GetAsDate は空(ブランク)を返したり、日付として不正な値になることがあります。
こうした場合に備えて、判定用の計算 を用意しておくと安心です。
// テキストが日付として有効かをチェックする例
Let (
d = GetAsDate ( テーブル::テキスト日付 ) ;
Case (
IsEmpty ( テーブル::テキスト日付 ) ; "" ;
IsEmpty ( d ) ; "日付として解釈できません" ;
d < Date ( 1900 ; 1 ; 1 ) or d > Date ( 2100 ; 12 ; 31 ) ; "想定外の年の可能性があります" ;
"" // 問題なし
)
)
このようなチェックを、
レイアウト上のメッセージフィールドやスクリプトの中で使うと、
誤った日付入力にすぐ気づけるようになります。
まとめ:テキスト日付は早めに正規化しておく
テキストで日付を持ったまま運用を続けると、
あとで「検索できない」「ソートが変」「集計が合わない」など、トラブルの種になりがちです。
GetAsDate を使って、入力のタイミングで日付を正規化 しておくと、
あとから修正する手間を大きく減らせます。
- テキスト日付は
GetAsDateで日付型に変換してから使う - 自動入力計算で「裏方フィールド」に正規化しておくと運用が楽
- 書式がバラバラな場合は、
Substituteや文字列操作で整えてから変換 - 変換できないケースに備え、簡単なエラー判定を用意しておく
このあたりを意識して設計しておくと、
FileMaker の日付処理を、より安心して活用できるようになります。