SOQLクエリによる日付の検索には専用の関数が用意されています。例えば年を取得する"CALENDAR_YEAR()"や月を取得する"CALENDAR_MONTH()"などです。これを利用することで日付の検索条件を効率よく指定することができます。
商談の完了予定日の年月を条件に指定して検索したい場合の処理だとこんな感じで検索できます。
public List<Opportunity> getOpportunies(Integer year, Integer month) { return [ SELECT Id ,Name ,Amount ,StageName FROM Opportunity WHERE CALENDAR_YEAR(CloseDate) =: year AND CALENDAR_MONTH(CloseDate) =: month ORDER BY Name ASC, Amount ASC LIMIT 200 ]; }
一ヶ月間の商談を検索したいようなときに、わざわざ月初日と月末日を取得して条件に指定するような必要もないのですごく便利です。WHEREだけでなくSELECTやGROUP BYに対しても使用することができます。
追記
完了予定日など日付型の項目では気にする必要はありませんが、日時型の項目を扱う場合にはタイムゾーン周りに注意が必要になります。