Salesforceの動的soqlでdatetime型の条件を使う

SalesforceのSOQLを作るときに、Datetime型は通常のString型などに比べてフォーマットが異なるので、メモです。

また、特にDatetime型は日本時間など、タイムゾーンを気にしないと、取得できるレコードが想定と異なる場合もあるので、注意が必要です。

private String getFormatedDatetime(Datetime sourceDatetime){
    
        return sourceDatetime.format('yyyy-MM-dd\'T\'HH:mm:ss.000\'+0900\'', 'Asia/Tokyo');
    
}
String getQuery = 'SELECT Id, Name FROM Contact ' +
    'Where IsDeleted  = FALSE ' +
    ' and SystemModstamp <= ' + getFormatedDatetime('Datetime項目')  + 
    ' ORDER BY StartDatetime__c ';

List<CompetitionDate__c> selectCdList = Database.query(getQuery);