php - MySQL date_format 和日期范围

标签 php mysql date

我正在尝试生成一个 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/

相关文章:

mysql - 使用 HQL/SQL 查询以分钟为单位计算日期差异

php - 依赖注入(inject)容器与注册表模式

javascript - 我的 WordPress 站点中的 FTP 服务器上的文件已损坏

mysql REGEXP匹配以2位数字结尾且仅以非数字开头的字符串

Mysql_将同一个表中的文本列中的值移动到数字列

java - 将 BreakAfterAcquireFailure 设置为 true 时,DataSource 的连接没有重新连接

php - 查找字符串中任意数字第一次出现的位置

php - 在mysql上查询数据后制作PHP页面

date - 回历日期的公式

R:有光泽的dateRangeInput格式