确定MySQL中新月的第一分钟

时间:2017-06-01 12:16:16

标签: mysql

我有一个像这样的查询,正确地为上个月"

提取数据
SELECT t.*
FROM table t 
WHERE CONCAT(MONTHNAME(t.create_date),' ', YEAR(t.create_date)) = CONCAT(MONTHNAME(CURRENT_DATE - INTERVAL 1 MONTH),' ', YEAR(CURRENT_DATE - INTERVAL 1 MONTH))

我现在想要扩展它,以便它还包括在新/当月的前2分钟内发生的任何事情。所以我试图做一些像......

SELECT t.*
    FROM table t 
    WHERE (
CONCAT(MONTHNAME(t.create_date),' ', YEAR(t.create_date)) = CONCAT(MONTHNAME(CURRENT_DATE - INTERVAL 1 MONTH),' ', YEAR(CURRENT_DATE - INTERVAL 1 MONTH)) 
OR (t.create_date between STARTOFMONTH and (STARTOFMONTH + INTERVAL 2 MINUTE)
)

我已经阅读过一些相似的帖子,但无法找到任何似乎适用于一般的月初+间隔的内容。方法(我无法明确说明有关月份,因为它显然每个月都会发生变化)。谢谢你的任何想法

1 个答案:

答案 0 :(得分:1)

你可以减去2分钟。我建议使用DATE_FORMAT()进行比较:

SELECT t.*
FROM table t 
WHERE DATE_FORMAT(t.create_date, '%Y-%m') = DATE_FORMAT(CURRENT_DATE  - INTERVAL 1 MONTH, '%Y-%m') OR
      DATE_FORMAT(t.create_date - INTERVAL 2 MINUTE, '%Y-%m') = DATE_FORMAT(CURRENT_DATE  - INTERVAL 1 MONTH, '%Y-%m);

您可以将其简化为:

WHERE DATE_FORMAT(CURRENT_DATE  - INTERVAL 1 MONTH, '%Y-%m') IN
          (DATE_FORMAT(t.create_date, '%Y-%m'),
           DATE_FORMAT(t.create_date - INTERVAL 2 MINUTE, '%Y-%m')
          )