【问题标题】:MySQL SP: Get Records from the last 4 Months, Month and Year GivenMySQL SP:获取过去 4 个月、月份和年份的记录
【发布时间】:2021-08-31 02:22:03
【问题描述】:

在给定月份和年份变量的情况下,我正在创建一个存储过程来获取前 4 个月的所有记录。

etimestamp 列的日期时间格式为12/30/2020 12:000:00 AM

如果 inMonth >= 4,此语句将起作用:

SELECT * FROM table_name
WHERE Month(etimestamp) in (inMonth , inMonth - 1, inMonth - 2, inMonth - 3) AND
Year(etimestamp) = inYear

但是,如果 inMonth 不是 >= 4,这将不起作用。

我想要一个也适用于去年的查询。

例如: inMonth = 2 AND inYear = 2020

预期输出记录:

  • 2020 年 2 月
  • 2020 年 1 月
  • 2019 年 12 月
  • 2019 年 11 月

【问题讨论】:

    标签: mysql


    【解决方案1】:

    你可以试试这个

    SELECT * FROM table_name WHERE etimestamp between now() - INTERVAL 4 MONTH and now()
    

    【讨论】:

    • 并且您可以将 now() 更改为 STR_TO_DATE('01,imonth,inyear','%d,%m,%Y') 以获取变量 inyear 的前 4 个月内的数据和月内
    • 非常感谢,@Mr Syhd。我有了开始的想法。我添加了对 make 子句 inclusive 的修改。这是我的最终查询:SELECT * FROM table_name WHERE (STR_TO_DATE('01, inMonth, inYear','%d, %m, %Y') - INTERVAL 3 MONTH) <= etimestamp AND etimestamp <= (STR_TO_DATE('01, inMonth, inYear', '%d, %m, %Y') + INTERVAL 1 MONTH)
    • @JonnelVeXuZDorotan 欢迎您,是的,您是对的,我忘记了包容性
    【解决方案2】:

    非常感谢@Mr Syhd 的回答。我有了开始的想法。我对您的答案进行了修改,以使该子句具有包容性。

    这是我的最后一个查询:

    SELECT
        *
    FROM
        table_name
    WHERE
        (STR_TO_DATE(CONCAT('01, ', inMonth, ', ', inYear),'%d, %m, %Y') - INTERVAL 3 MONTH) <= etimestamp AND
        etimestamp <= (STR_TO_DATE(CONCAT('01, ', inMonth, ', ', inYear),'%d, %m, %Y') + INTERVAL 1 MONTH)
    

    有用链接:MySQL “between” clause not inclusive?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多