从 MySql 返回少于 60 天的行

Posted

技术标签:

【中文标题】从 MySql 返回少于 60 天的行【英文标题】:Returning Rows from MySql less than 60 Days Old 【发布时间】:2011-09-29 13:45:11 【问题描述】:

我有以下查询返回表中的所有行:

$query="SELECT * FROM $tbl_name ORDER BY job_id DESC";

我想将这些结果限制为 60 天以内的条目。我使用以下方法记录输入数据库的日期:

$dt=date('d M Y');

这存储在名为“日期”的列中。

有人可以帮我修改我的查询吗?

谢谢 丹

【问题讨论】:

dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html @hakre 感谢您的链接和编辑:) 【参考方案1】:

如果日期在数据库中像 varchar 一样存储,您的查询应该是:

SELECT * 
FROM $tbl_name 
WHERE TO_DATE(date, 'dd MON yyyy') >= DATE_SUB(CURDATE(), INTERVAL 60 DAY)
ORDER BY job_id DESC

如果日期像日期一样存储,请使用:

SELECT * 
FROM $tbl_name 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 60 DAY)
ORDER BY job_id DESC

【讨论】:

【参考方案2】:
    $query="SELECT * FROM $tbl_name WHERE DATEDIFF(CURDATE(), STR_TO_DATE(date,'%d %M %Y')) <60 ORDER BY job_id DESC"

【讨论】:

谢谢,但遗憾的是这不起作用。它不会返回错误,但不会过滤结果。可能是因为当 CURDATE 是 YYYY MM DD 格式时,我以 'd M Y' 格式存储数据? 您是将日期存储在日期字段还是 varchar 中? 如果您将日期作为字符串(在 varchar 或文本字段中)存储在数据库中,我的最后一次编辑应该可以工作 嗨,Daniel,它以 varchar 形式存储,您的编辑非常有用。非常感谢。丹 您应该将日期存储在日期字段(日期时间数据类型)中。这使得操作、比较、排序等变得更加容易。如果你想为用户很好地显示它,那么你可以在 php 中轻松地对其进行格式化。【参考方案3】:
SELECT * FROM $tbl_name FROM_UNIXTIME(date) >= DATE_SUB(CURDATE(), INTERVAL 60 DAY) ORDER BY job_id DESC

【讨论】:

【参考方案4】:

试试这个(未经测试)

SELECT * FROM $tbl_name WHERE date >= DATE_SUB(CURDATE(), INTERVAL 60 DAY) ORDER BY job_id DESC

【讨论】:

谢谢,但如上所述,遗憾的是这不起作用。它不会返回错误,但不会过滤结果。可能是因为当 CURDATE 是 YYYY MM DD 格式时,我以 'd M Y' 格式存储数据?【参考方案5】:

你可以作为

select  b.mobile_number, max(b.bill_number), max(b.created_on), c.name from MasterBill as b, MasterCustomer as c  WHERE b.created_on < NOW() - INTERVAL 60 DAY and b.mobile_number = c.mobile_number group by mobile_number;

认为手机号码是与客户主数据和计费的关键绑定数据。

【讨论】:

以上是关于从 MySql 返回少于 60 天的行的主要内容,如果未能解决你的问题,请参考以下文章

dplyr transmute 返回的行数少于原始数据帧

查询在 JDBC 中使用时返回的行数少于 SQL 开发人员

MySQL 从 7 天前选择行

MySQL:删除子查询返回的行

MySql 我如何返回过去 60 天和不在 60 天内的多个特定 ID?

MySQL InnoDB 表返回 20% 的行然后停止