function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Shubham Gawande 5Shubham Gawande 5 

expecting a colon, found 'Datetime.now' (I facing error while comparing datetime )

public class ScheduleMessageBatch implements Database.Batchable<SObject>{
    
    
    public Database.queryLocator start(Database.BatchableContext BC)
    {
        return Database.getQueryLocator('Select Id, DeliveryStatus__c, Source__c, ScheduledAt__c, MessageText__c, ToNumber__c, FromNumber__c From MessageHistory__c where DeliveryStatus__c = \'Scheduled\' AND Source__c = \'Drip Campaign\' AND ScheduledAt__c <= Datetime.now()');
        
    }
    public void execute(Database.BatchableContext BC, List<MessageHistory__c> messagehistoryList )  {
        
        
        for(MessageHistory__c mh : messagehistoryList) {
            MessageDesk mD = new MessageDesk();
            MessageInfo mi = new MessageInfo(mh);
            mD.sendSMS(mi);
        }
        
    }
    public void finish(Database.BatchableContext BC)
    {
        
    }
}
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Shubham,

I tried saving the same Apex Class. Can you retry by logging out and logging in again.

Thanks,
 
Shri RajShri Raj
public class ScheduleMessageBatch implements Database.Batchable<SObject>{

    public Database.queryLocator start(Database.BatchableContext BC){
        return Database.getQueryLocator([
            SELECT Id, DeliveryStatus__c, Source__c, ScheduledAt__c, MessageText__c, ToNumber__c, FromNumber__c 
            FROM MessageHistory__c 
            WHERE DeliveryStatus__c = 'Scheduled' 
            AND Source__c = 'Drip Campaign' 
            AND ScheduledAt__c <= :Datetime.now()
        ]);
    }

    public void execute(Database.BatchableContext BC, List<MessageHistory__c> messagehistoryList ){
        for(MessageHistory__c mh : messagehistoryList) {
            MessageDesk mD = new MessageDesk();
            MessageInfo mi = new MessageInfo(mh);
            mD.sendSMS(mi);
        }
    }
    
    public void finish(Database.BatchableContext BC){
        
    }
}


You can fix the error by using the colon syntax to reference the Datetime.now() value in the SOQL query. Here's the updated code:
Shubham Gawande 5Shubham Gawande 5

Thanks for your suggestion @sai Praveen and @shri Raj 

I have done it by creating one variable and storing in it datetime.now