从 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 天的行的主要内容,如果未能解决你的问题,请参考以下文章