我正在尝试生成一个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)。
知道我怎么能做到这一点吗?
发布于 2016-02-21 15:31:11
选择正确的百分比!使用%m而不是%c。%m是零填充(根据您的需要,即01 - 12),而%c不是(即1 - 12)。
详情请参见这里。
更新:
对不起,由于您将日期存储为字符串,上述情况不正确。我回答得太快了。
问题是,您正在比较字符串。所以“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列中,并且只在插入(使用STR_TO_DATE)和选择(使用DATE_FORMAT)期间转换它们。
发布于 2016-02-21 15:35:45
用这个代替你的:
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'https://stackoverflow.com/questions/35537931
复制相似问题