2016-09-23 3 views
0

У меня есть следующий запрос:Выберите в зависимости CURDATE MySQL

SELECT tbl_usuarios.Correo, 
tbl_alertas.Id, 
tbl_alertas.Purpose, 
tbl_alertas.Status, 
tbl_alertas.OpenDate, 
tbl_alertas.CloseDate, 
tbl_alertas.Owner, 
tbl_alertas.ValueStream, 
tbl_alertas.Family 
FROM tbl_usuarios 
INNER JOIN tbl_alertas ON tbl_usuarios.Nombre = tbl_alertas.Owner 
WHERE (STATUS = 'En aprobacion' OR STATUS = 'Activa') 
AND CloseDate < CURDATE() 

В результате этого запроса у меня есть следующая таблица:

Result

Всё это нормально.

Теперь проблема в том, что я буду использовать этот запрос на своем веб-сайте, я создаю функцию JavaScript, которая будет выполняться каждые 5 и 19 месяцев. Мой вопрос, что я могу сделать, чтобы выбрать только строку, в которой его CloseDate равен < = yyyy-mm-07 или CloseDate> = yyyy-mm-07 и < = yyyy-mm-21 в зависимости от CURDATE (5 или 19), пример :

Curdate = yyyy-mm-05.
Ожидаемый результат: Данные Id 00003

Что я пытался добавлял еще один и в запросе, что-то вроде этого:

AND CloseDate < CURDATE() AND CloseDate <= '2016-09-07' 

Если мой вопрос не так много ясно, позвольте мне объяснить с этим, Я хочу выбрать CloseDate '2016-09-07', когда curdate = '2016-whatever-05, 06', 07 или выберите CloseDate '2016-09-21', где curdate = '2016-whatever-19, 20, 21' ,

ответ

0

Не знаю, если я правильно понял вашу проблему, но проверить функцию DAYOFMONTH() или просто ДЕНЬ().

Возвращает день месяца для даты, в диапазоне от 1 до 31, или 0 для даты, такие как «0000-00-00» или «2008-00-00», которые имеют нулевой день часть ,

Вы можете использовать его как этот

SELECT tbl_usuarios.Correo, 
      tbl_alertas.Id, tbl_alertas.Purpose, 
      tbl_alertas.Status, tbl_alertas.OpenDate, 
      tbl_alertas.CloseDate, 
      tbl_alertas.Owner, 
      tbl_alertas.ValueStream, 
      tbl_alertas.Family 
    FROM tbl_usuarios 
    INNER JOIN tbl_alertas 
    ON tbl_usuarios.Nombre = tbl_alertas.Owner 
    WHERE (STATUS = 'En aprobacion' OR STATUS = 'Activa') 
    AND (CASE 
      WHEN DAY(CURDATE()) = '5' AND DATE(CloseDate) <= DATE_FORMAT(NOW() ,'%Y-%m-07') 
      THEN 1 
      WHEN DAY(CURDATE()) = '19' AND (DATE(CloseDate) >= DATE_FORMAT(NOW() ,'%Y-%m-07') AND DATE(CloseDate) <= DATE_FORMAT(NOW() ,'%Y-%m-21')) 
      THEN 1 
      ELSE 0 
      END) 
+0

Это трудно объяснить, но здесь мы идем другими словами, представьте, что вы собираетесь выполнить мой запрос только дни пятого девятнадцатом не имеет значения, год и месяц, пример сегодня - 2016-09-05 (curdate). Я хочу, чтобы мой запрос только выбирал строку, где CloseDate = 2016-09-07, но мой текущий запрос выбирает оба. –

+0

поэтому, когда 5-й день месяца вы хотите выбрать все записи с закрытым <= 7, а когда его 19, вы хотите выбрать все записи с закрытым> = 7 и закрыть <= 21 – Allkin

+0

Да, это то, что я хочу –

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