选择依赖CURDATE MySQL

时间:2016-09-23 14:55:31

标签: mysql sql

我有以下查询:

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所在的行&lt; = yyyy-mm-07或者CloseDate&gt; = yyyy-mm-07和&lt; = yyyy-mm-21,具体取决于CURDATE(第5或第19位) ),例如:

  

Curdate = yyyy-mm-05。
  预期结果:来自Id 00003的数据

我尝试的是在查询中添加另一个AND,如下所示:

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

如果我的问题不太明确,让我解释一下,我想选择CloseDate&#39; 2016-09-07&#39;当curdate =&#39; 2016-whatever-05,06&#39;,07或选择CloseDate&#39; 2016-09-21&#39; curdate =&#39; 2016-whatever-19,20,21&#39;。

1 个答案:

答案 0 :(得分:0)

不知道我是否正确理解了您的问题,但请检查 DAYOFMONTH() 或只需 DAY()功能。

  

返回日期的月份日期,范围为1到31或0   日期如&#39; 0000-00-00&#39;或者&#39; 2008-00-00&#39;零日零件。

您可以像这样使用

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)