0
votes

I am trying to get orders which are approved between 8AM and 4PM

SELECT 
    * 
FROM 
    orders 
WHERE 
    approved_date BETWEEN 'CURDATE() 8:00:00' AND 'CURDATE() 16:00:00'

Here I am trying to get orders which are approved after 4PM (till next working day 8AM)

SELECT 
    * 
FROM 
    orders 
WHERE 
    approved_date BETWEEN 'CURDATE() 16:00:00' AND 'NEXT_WORKING_DAY 8:00:00'

How to write these queries correctly?

approved_date is DATETIME format (0000-00-00 00:00:00) using MySQL

Edit: working day = monday tuesday wednesday thursday friday

3

3 Answers

1
votes

Use timestampadd

timestampadd(HOUR, 16, CURDATE()) # 4 pm
timestampadd(HOUR, 32, CURDATE()) # 8 am the next day
1
votes

Use it as this:

timestampadd(HOUR, 16, CURDATE()) # same day 16:00

timestampadd(HOUR, 32, CURDATE()) # next day 8:00
0
votes

How about this?

 WHERE date(approved_date) = CURDATE() AND
       time(approved_date) BETWEEN '8:00:00' AND '16:00:00'

I don't understand what the "NEXT_WORKING_DAY" is supposed to mean. Perhaps it is this:

WHERE date(approved_date) = CURDATE() AND time(approved_date) >= '8:00:00' OR
      date(approved_date = CURDATE() + 1 AND time(approved_date) <= '16:00:00'