Mysql子句查询:从昨天/上周/等检索记录

时间:2015-07-24 20:43:33

标签: php mysql linux ubuntu debian

我正在尝试查询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)

3 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

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 :(得分:0)

正如我所想,我的第一个问题是我的日期被认为是一个字符串;因此必须进行一些格式化以将日期部分识别为正式日期格式。然后我可以使用任意数量的函数,包括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;