【问题标题】:MySQL: How to query data of last month if this month of the year is January?MySQL:如果今年的这个月份是一月,如何查询上个月的数据?
【发布时间】:2019-01-01 22:25:26
【问题描述】:

如果今年的当前月份是 2019 年 1 月,我无法找到上个月(12 月)的记录,该月被视为 2018 年的月份。

这是我迄今为止尝试过的,但它不显示记录。

 mysql_query("SELECT * FROM tbl_logs WHERE MONTH(date_added) = MONTH(NOW())-1 ");
 //This must display all records of December of last year. 

但在某些查询中,它可以工作。比如查找去年的记录:

 mysql_query("SELECT * FROM tbl_logs WHERE YEAR(date_added) = YEAR(NOW())-1 ");
 //This displays all records of last year

我的输出应该能够显示去年 12 月的所有记录。

谢谢。

【问题讨论】:

  • MONTH(NOW() - 1) 得出这个日期:2 / 1 / 2018
  • 我的代码的正确格式应该是什么?可以给我看看吗?

标签: php mysql


【解决方案1】:

这可能有点小技巧,Sticky Bit 似乎有一个很好的答案,但你可以试试这个。

$currentDate = date("m", time());
        if($currentDate != 01){
            $currentDate--;
        }else{
            $currentDate = 12;
        }

然后插入$currentDate

$query = "SELECT * FROM tbl_logs WHERE MONTH(date_added) = MONTH( " . $currentDate . " )";
mysql_query($query );

【讨论】:

  • 感谢您分享您的答案!
【解决方案2】:

您可以先使用date_sub 减去一个月,然后使用month()year() 提取月份或年份。

上个月:

SELECT *
       FROM tbl_logs
       WHERE month(date_added) = month(date_sub(now(), INTERVAL 1 MONTH));

去年:

SELECT *
       FROM tbl_logs
       WHERE year(date_added) = year(date_sub(now(), INTERVAL 1 MONTH));

但更有效的方法是计算和使用范围,因为它允许使用索引。

上个月:

SELECT *
       FROM tbl_logs
       WHERE date_added >= concat(year(date_sub(now(), INTERVAL 1 MONTH)),
                                  '-',
                                  lpad(month(date_sub(now(), INTERVAL 1 MONTH)), 2, '0'),
                                  '-',
                                  '01')
             AND date_added < concat(year(now()),
                                     '-',
                                     lpad(month(now()), 2, '0'),
                                     '-',
                                     '01');

去年:

SELECT *
       FROM tbl_logs
       WHERE date_added >= concat(year(now()) - 1,
                                  '-01-01')
             AND date_added < concat(year(now()),
                                     '-01-01');

您想要的索引将位于tbl_logs (date_added)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多