首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL date_format和日期范围

问MySQL date_format和日期范围
EN

Stack Overflow用户
提问于 2016-02-21 15:24:22
回答 2查看 535关注 0票数 1

我正在尝试生成一个MySQL查询,该查询将显示特定日期范围之间的记录。

以英国为主的用户群,我必须以日、月、年的方式格式化日期。

因此,我储存的日期如下:

代码语言:javascript
复制
$timestamp = date("d-m-Y H:i:s");

现在,我正在尝试运行一个MySQL查询,以在设置的日期范围之间返回结果。对于这个特定的查询,一天中的时间并不是什么问题。

我想出了以下几点,似乎不会产生任何结果。

代码语言:javascript
复制
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)。

知道我怎么能做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-21 15:31:11

选择正确的百分比!使用%m而不是%c。%m是零填充(根据您的需要,即01 - 12),而%c不是(即1 - 12)。

详情请参见这里。

更新:

对不起,由于您将日期存储为字符串,上述情况不正确。我回答得太快了。

问题是,您正在比较字符串。所以“14-02-2017”就在“24-12-2015”之前。因此,您还必须将字符串转换为date_time值:

代码语言:javascript
复制
str_to_date(`timestamp`, '%d-%m-%Y %H:%i:%s')

然后,您必须将此值与给定的值进行比较,转换为date_time类型:

代码语言:javascript
复制
... 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列中,并且只在插入(使用STR_TO_DATE)和选择(使用DATE_FORMAT)期间转换它们。

票数 0
EN

Stack Overflow用户

发布于 2016-02-21 15:35:45

用这个代替你的:

代码语言:javascript
复制
SELECT * FROM table WHERE DATE_FORMAT(FROM_UNIXTIME(timestamp), '%d-%m-%Y %h:%i:%s') 
BETWEEN '01-01-2015 00:00:00' AND '31-12-2015 23:59:00'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35537931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档