【问题标题】:HOw to SELECT * (all) which date start from the last day of last month to the first day of next month如何选择 *(全部)从上个月的最后一天到下个月的第一天的日期
【发布时间】:2011-09-26 18:44:26
【问题描述】:

使用 PHP 和 MySQL 并想使用 SELECT 语句,其中 date_post(datetime 变量) 从上个月的最后一个日期开始到下个月的第一天,请帮帮我。

提前谢谢你。

my database: 'id', 'content', 'image', 'date_post', 

等等。我尝试使用

$today = getdate();
$thisyear=$today['year'];
$thismon=$today['mon'];
$date_start=$thisyear.'-'.$thismon.'-01';
$date_end=$thisyear.'-'.($thismon+1).'-01';
$sql="SELECT *, DATE_FORMAT(date_post, '%d-%m-%Y') AS datepost
      FROM my_table
      WHERE date_post BETWEEN date('$date_start') 
        AND date('$date_end')
      ORDER BY date_post DESC"; 

【问题讨论】:

  • 请提供有关您的数据库架构的一些详细信息,以及您尝试过的任何现有 SQL。
  • 我的数据库:'id'、'content'、'image'、'date_post'等,我尝试使用 $today = getdate(); $thisyear=$today['年份']; $thismon=$today['mon']; $date_start=$thisyear.'-'.$thismon.'-01'; $date_end=$thisyear.'-'.($thismon+1).'-01'; $sql="SELECT *, DATE_FORMAT(date_post, '%d-%m-%Y') AS datepost FROM my_table WHERE date_post BETWEEN date('$date_start') AND date('$date_end') ORDER BY date_post DESC";

标签: php mysql sql date select


【解决方案1】:

它只需要在 MySQL 中进行一次查询,无需任何 PHP:

SELECT * FROM `table_name`
WHERE DATE(`date_post`) >= DATE_FORMAT(CURDATE() - INTERVAL 1 MONTH, CONCAT('%Y-%m-', DAY(LAST_DAY(CURDATE() - INTERVAL 1 MONTH))))
AND DATE(`date_post`) <= DATE_FORMAT(CURDATE() + INTERVAL 1 MONTH, '%Y-%m-01');

【讨论】:

  • 致 garvey:谢谢,但它返回错误:警告:mysql_result():提供的参数不是有效的 MySQL 结果资源...
  • @AJ OP,嗯。我已经在我的 dbmysqlforge 中对其进行了测试。您可以通过调用此查询来获取您的 php 代码吗?您使用的是哪个版本的 MySQl?
  • 我尝试使用这个(它的工作)-re move single qoutes form date_post,非常感谢。 $sql="SELECT * FROM entry WHERE DATE(date_post) >= DATE_FORMAT(CURDATE() - INTERVAL 1 MONTH, CONCAT('%Y-%m-', DAY(LAST_DAY(CURDATE() - INTERVAL 1 MONTH))) ) AND DATE(date_post)
  • 更多信息:phpMyAdmin - 2.10.3 MySQL 客户端版本:5.0.51a 使用的 PHP 扩展:mysql
  • @AJ OP - 单击答案旁边的向上小箭头。看起来你接受了答案。但是,这是表示支持的更好方式。
【解决方案2】:

确保查询不会扫描全表而是使用date_post的索引(如果有的话!):

SELECT * 
FROM myTable
WHERE date_post < LAST_DAY(CURDATE())
                   + INTERVAL 2 DAY
  AND date_Post >= LAST_DAY( LAST_DAY( CURDATE()) - INTERVAL 1 MONTH )

如果它今天运行(2011-07-01),它将给出2011-06-31 00:00:00 和2011-08-01 23:59:59 之间的所有日期时间。

【讨论】:

    猜你喜欢
    • 2022-11-24
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多