みなさんこんにちは。
Salesforceお助け隊の加藤です。
今回は、動的SOQLのWHERE句で日付を指定する方法をご紹介します。
以下に実装例を記載します。
例)完了予定日が2011年12月31日以前の商談を取得する
Date myDate = date.newinstance(2011, 12, 31);
String str = 'SELECT id, Name FROM Opportunity WHERE CloseDate <= ' + String.valueOf(myDate);
List<Opportunity> = Database.query(str);
日付を条件とするときは、以下の2点に注意します。
1.yyyy-MM-dd形式の文字列に変換する
(誤)WHERE Close Date <= ' + myDate
(正)WHERE Close Date <= ' + String.valueOf(myDate)
日付を文字列に変換するときのフォーマットは、yyyy-MM-dd形式である必要があります。
Date型ならば、String.valueOf(myDate)を使うことで自動的にこのフォーマットに変換されます。
もし、Date型ではなく、yyyy/MM/dd形式のString型文字列を日付の条件として扱いたい場合は、
Date.parseメソッドを使用して、一度、日付型に変換した上で、yyyy-MM-dd形式の文字列に変換します。
例)
String strDate = '2011/12/31';
Date myDate = Date.parse(strDate);
... WHERE Close Date <= ' + String.valueOf(myDate)
2.変換した日付文字列をシングルクォーテーションでくくらない
(誤)WHERE Close Date <= \'' + String.valueOf(myDate) + '\''
(正)WHERE Close Date <= ' + String.valueOf(myDate)
うっかりシングルクォーテーションでくくると、以下のエラーメッセージが表示されます。
「value of filter criterion for field '[項目名]' must be of type date and should not be enclosed in quotes」
このメッセージの前半に「Date型でなければならない」と書いてありますが、
重要なのは後半の「シングルクォーテーションでくくってはならない」の部分です。
紛らわしいので注意が必要です。
「セールスフォースお助け隊ブログ」へのコメントやご意見等ありましたら
ファンページまでお願いします。 Facebookのファンページ

