我正在尝试生成一个 MySQL 查询,以显示特定日期范围内的记录。
为了迎合以英国为主的用户群,我必须以日-月-年的方式设置日期格式。
因此,我按如下方式存储日期:
$timestamp = date("d-m-Y H:i:s");
现在我正在尝试运行 MySQL 查询以返回设定日期范围内的结果。 一天中的时间对于这个特定查询来说并不是什么大问题。
我想出了以下似乎没有产生任何结果。
SELECT * FROM table WHERE DATE_FORMAT(`timestamp`, '%d-%m-%Y %H:%i:%s') BETWEEN '01-01-2015 00:00:00' AND '31-12-2015 23:59:00'
我已确保 date_format
内容与 php date()
变量的相同值相匹配,但它仍然不显示任何内容!
可能值得注意的是,时间戳列设置为 varchar(255)
类型。
有什么想法可以实现吗?
最佳答案
选择正确的百分比!使用 %m
而不是 %c
。 %m
是零填充的(根据您的需要,即 01
- 12
)而 %c
不是(即 1
- 12
)。
参见 here了解详情。
更新:
抱歉,以上内容不正确,因为您将日期存储为字符串。我回答得太快了。
问题在于您正在比较字符串。所以“14-02-2017”在“24-12-2015”之前。因此,您还必须将字符串转换为 date_time 值:
str_to_date(`timestamp`, '%d-%m-%Y %H:%i:%s')
然后你必须将它与给定的值进行比较,转换为 date_time 类型:
... where str_to_date(`timestamp`, '%d-%m-%Y %H:%i:%s')
between str_to_date('01-01-2015 00:00:00', '%d-%m-%Y %H:%i:%s')
and str_to_date('31-12-2015 23:59:00', '%d-%m-%Y %H:%i:%s');
但是,我强烈建议您将日期存储在 DATE_TIME 列中,并且仅在 INSERT(使用 STR_TO_DATE)和 SELECT(使用 DATE_FORMAT)期间转换它们。
关于php - MySQL date_format 和日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35537931/