2016-10-18 2 views
1

я написал этот запрос будет, но это возвращение нулевой, хотя это неMysql получить кортежи, где дата в этом месяце

должен я работать с БД, содержащей раз работы. Таким образом, каждый раз работа имеет начало DateTime и конец DateTime

Я хотел бы, чтобы все рабочие времена, которые были записаны в этом месяце:

 SELECT id, DATE_FORMAT(DATE(t.begin), "%d-%m-%Y") as date, 
      CONCAT(DATE_FORMAT(t.begin, "%H:%i"), " - ", DATE_FORMAT(t.end, "%H:%i")) as timerange, 
      CASE WHEN t.end = "0000-00-00 00:00:00" 
      THEN TIME_FORMAT(TIMEDIFF(DATE_ADD(NOW(), INTERVAL 1 HOUR), t.begin), "%H:%i") 
      ELSE TIME_FORMAT(TIMEDIFF(t.end, t.begin), "%H:%i") 
      END as fulltime_duration, 
      (
      SELECT TIMEDIFF(l.end, l.begin) as duration 
      FROM timeslots l 
      WHERE l.type = 2 
      AND l.parent_id = t.id 
     ) as lunch_duration 

     FROM timeslots t 
     WHERE t.user_id = '.$userId.' 
     AND t.approved = 1 
     AND t.type = '.Timeslot::DAY.' 
     AND DATE(begin) >= DATE_FORMAT(CURDATE(), "%Y-%m-01") 
     ORDER BY t.begin 

, когда я заменить эту строку:

AND DATE(begin) >= DATE_FORMAT(CURDATE(), "%Y-%m-01") 

по:

AND WEEKOFYEAR(begin) = WEEKOFYEAR(NOW()) 

возвращает все времена, записанные на этой неделе. Так что все работает, кроме этой линии

AND DATE(begin) >= DATE_FORMAT(CURDATE(), "%Y-%m-01") 

Когда я заменить «-01» на «% d» возвращает все время работы сегодня так я предполагаю, что проблема возникает из этого «-01». Но я не понимаю, как это сделать по-другому.

Любой, чтобы помочь мне ...

+0

попробовать: И ДАТА (начало)> = ДАТА (CURDATE()) –

+0

Ваше состояние работает для меня: http://rextester.com/HEBEM85257 –

+0

@ShankaSMS это возвращение временных интервалов сегодня, что логика – Fab

ответ

0

Вот один из способов:

DATE(begin) >= DATE_ADD(CURDATE(), 1 - DAY(CURDATE())) 

Примечание: Вам не нужно DATE(begin) (потому что время компонента делает это больше), так что вы можете применение:

begin >= DATE_ADD(CURDATE(), 1 - DAY(CURDATE())) 

преимущество заключается в том, что это может сделать использование индекса на begin, если это необходимо.

+0

Он вернул эту ошибку: проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '1 - DAY (CURDATE())) – Fab

+0

Возможно, вам стоит сообщить нам версию? – Lennart

+0

Версия сервера: 5.5.45-log - Сервер сообщества MySQL (GPL)/ Версия протокола: 10/Версия PHP: 5.6.23/Информация о версии: 4.5.2 – Fab

Смежные вопросы