代码之家  ›  专栏  ›  技术社区  ›  Dexter

包含当前月份和上个月份的特定日期

  •  -2
  • Dexter  · 技术社区  · 6 年前

    SELECT SUM(`amount`)
    FROM employees 
    WHERE (`date` between "2018-08-26" and "2018-09-26") AND `status` = 'Pending';
    

    在上面的示例中,如果当前月份是 9 那么查询应该是 08-26 09-26 10 然后 09-26 10-26 等等。

    5 回复  |  直到 6 年前
        1
  •  1
  •   Salman Arshad    6 年前

    以下是如何构建所需日期:

    SELECT 
        CURRENT_DATE,
        STR_TO_DATE(CONCAT_WS('-', YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 26), '%Y-%m-%d'),
        STR_TO_DATE(CONCAT_WS('-', YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 26), '%Y-%m-%d') - INTERVAL 1 MONTH
    -- 2018-09-25 | 2018-09-26 | 2018-08-26
    

    并在查询中使用以上内容:

    SELECT SUM(`amount`)
    FROM employees 
    WHERE `date` BETWEEN
        STR_TO_DATE(CONCAT_WS('-', YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 26), '%Y-%m-%d') - INTERVAL 1 MONTH AND
        STR_TO_DATE(CONCAT_WS('-', YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 26), '%Y-%m-%d')
    AND `status` = 'Pending';
    
        2
  •  2
  •   Michał Turczyn    6 年前

    SELECT * FROM my_table
    WHERE some_datetime_column > DATE_ADD(NOW(), INTERVAL -1 MONTH);
    

    SELECT MONTH(NOW()), YEAR(NOW())
    

    Demo

    --here you specify the day of the month you want
    SELECT @days := 26 - DAY(NOW());
    SELECT @startDate := DATE_ADD(CAST(NOW() AS DATE), INTERVAL @days DAY),
           @endDate := DATE_ADD(DATE_ADD(CAST(NOW() AS DATE), INTERVAL @days DAY), INTERVAL -1 MONTH)
    

    Another demo

    然后你可以像这样使用它:

    SELECT * FROM t
    WHERE date_column BETWEEN @startDate AND @endDate
    
        3
  •  1
  •   Fahmi    6 年前

    使用now()和last month(DATE\u SUB(now(),INTERVAL 1 month))在下面进行尝试:

    SELECT SUM(`amount`) FROM employees 
    WHERE (`date` between DATE_SUB(NOW(), INTERVAL 1 MONTH) and now())
    AND `status` = 'Pending';
    
        4
  •  0
  •   theboringdeveloper    6 年前

    获取当前月份使用

    MONTH(NOW())
    

    YEAR(NOW())
    

    但你不需要这些

    用这个-

    SELECT SUM(`amount`) FROM employees 
    WHERE (`date` between DATE_ADD(CURDATE(), INTERVAL -1 MONTH) and CURDATE()) 
    AND `status` = 'Pending';
    

    要获得与上月相同的日期,请使用:

     DATE_ADD(CURDATE(), INTERVAL -1 MONTH)
    

    SELECT CURDATE()
    

    输出:

    2018-09-25
    

    SELECT DATE_ADD(CURDATE(), INTERVAL -1 MONTH)
    

    输出:

    2018-08-25
    
        5
  •  0
  •   Biplab Sarker Todd Price    6 年前

    您可以使用过程来代替原始查询,它将根据您提供的日期动态创建日期。

    分隔符$$

    --调用Get\u Sum(15)--动态传递日期

    删除过程(如果存在)获取\u和$$

    分隔符;

    分隔符$$

    --

    CREATE DEFINER='根'@'本地主机' 过程Get\ U Sum(以天为单位) 开始

    声明当前月份日期时间; 申报上月日期时间;

    选择日期子项(当前月份,间隔1个月)到上个月份;

    选择总和( amount 在哪里( date status ='挂起';

    结束

    分隔符;