【问题标题】:Mysql subdate query: retrieve records from yesterday/last week/etcMysql子日期查询:检索昨天/上周/等的记录
【发布时间】:2015-07-24 20:43:33
【问题描述】:

我正在尝试查询 mysql 数据库以返回自昨天以来发生的所有记录。我的 mysql 版本是 5.5.41 (Ubuntu)。这是我没有返回任何记录的查询:

select * from table_name
where column_name between subdate(CURDATE(), 1) and CURDATE();

我也试过了,没有结果:

SELECT sum(column_name BETWEEN subdate(current_date(), 1) and current_date()) AS Total FROM table_name;

我应该补充一点,我正在运行此查询的 column_name 采用以下形式:2015 年 2 月 12 日 (18:25)

注意:看起来这是一个格式问题。我已经运行了这个日期时间格式:

$old = date('d M Y (h:i)');
$old_timestamp = strtotime($old);
$new_date = date('Y-m-d H:i:s', $old_timestamp);

但是,当 echo $old 呈现以下内容时:2015 年 7 月 24 日 (09:20),echo $new_date 输出错误的时间 (1970-000:00:00) .

【问题讨论】:

  • 不确定您的第二个查询是对还是错,但您在第二个查询中缺少的一件事是AS 例如sum(do your stuff) AS Total,在PHP 中您将回显Total
  • 谢谢 - 我已经添加了您的更正..
  • 这更像是您必须在更正后检查查询是否有效,有问题的更正不会解决问题

标签: php mysql linux ubuntu debian


【解决方案1】:

SELECT * FROM tablename WHERE TIMESTAMPDIFF(DAY, dateInserted, NOW()) < 1

相关记录需要设置适当的日期时间才能正常工作 - 在我的示例中,我提供的列为 dateInserted

关于TIMESTAMPDIFF()https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff的更多信息

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT * 
    FROM table_name 
    WHERE column_name BETWEEN UNIX_TIMESTAMP(subdate(current_date, 1)) 
        AND UNIX_TIMESTAMP(current_date));
    

    【讨论】:

    • 为什么 OP 应该尝试这个,好的答案必须解释 OP 做错了什么以及你答案中的代码做了什么。
    【解决方案3】:

    正如我所想,我的第一个问题是我的日期被识别为字符串;因此必须进行一些格式化才能将日期部分识别为官方日期格式。然后我可以使用任意数量的函数,包括subdate() 函数。否则,任何字符串的默认输出都是 1970-000:00:00。这对我有用:

    $date=date('Y-m-d');
    $olddate = date('d M Y', strtotime($date .' -1 day'));
    
    $sql = "SELECT * FROM table_name WHERE SUBSTRING(column_name,1,11)=".$olddate;
    

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      相关资源
      最近更新 更多