php - 间隔 30 天未给出预期结果

标签 php mysql date intervals between

我对MySQL DATE和DATE_FORMAT有些熟悉。

但是,当使用 INTERVAL - 30 DAY 对日期范围运行查询时,我要么无法获得正确的输出,要么会引发错误。进一步查看该表,发现 date_buy 的每一行都采用以下格式: 2015 年 9 月 9 日星期一等。我尝试使用 PHP date('D d F Y') 而不是 DATE(NOW()) 等,但无法解决问题。是否还有另一种已知的解决方法?

是的,已经尝试过 date_buy_x 和 date_buy_y 之间。即使表中有记录,它也不会返回任何内容。

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales` 
WHERE date_buy >= $date - INTERVAL 30 DAY 
GROUP BY date_buy

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales` 
WHERE date_buy BETWEEN date_buy_x && date_buy_y
GROUP BY date_buy ORDER BY date_buy DESC

更新

SO,根据建议,并进一步研究 DATE_FORMAT 和 CURDATE 参数,已经能够显示数据。 ORDER BY 还必须采用 DATE_FORMAT(date_buy, '%a %d %M %Y') 格式才能正确输出。但是,关于 INTERVAL 30 DAY 参数的问题仍然存在。

WHERE datebuy <= DATE_FORMAT(CURDATE() - INTERVAL 30 DAY,'%a %d %M %Y')
GROUP BY date_buy ORDER BY DATE_FORMAT(date_buy, '%a %d %M %Y') DESC

这正在带回数据,但仍然超出范围,这让我认为它没有接受 INTERVAL 请求。

Sat 22 November 2014 (50 sales) 
Thu 18 December 2014 (50 sales) 
Thu 22 January 2015 (20 sales) 
Sun 25 January 2015 (20 sales) 
Mon 06 April 2015 (25 sales) 
Sun 12 April 2015 (25 sales) 
Mon 03 August 2015 (10 sales)

当输出只能是:

Mon 03 August 2015 (10 sales)

最佳答案

你可以想象:

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales` 
WHERE DATE(STR_TO_DATE(date_buy, '%a %d %M %Y')) >= $date - INTERVAL 30 DAY 
GROUP BY date_buy

除非$date也是这种字符串格式,在这种情况下您也需要对其使用STR_TO_DATE函数。

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales` 
WHERE DATE(STR_TO_DATE(date_buy, '%a %d %M %Y')) >= DATE(STR_TO_DATE($date, '%a %d %M %Y')) - INTERVAL 30 DAY 
GROUP BY date_buy

关于php - 间隔 30 天未给出预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32490169/

相关文章:

php - 删除小数点,例如99.99 = 9999

php - 详细信息未存储到数据库中

mysql - SQL删除where子句

php - 将带有时区的日期字符串转换为时间戳

javascript - 在 JavaScript 中将倒计时日期格式转换为毫秒

PHP编码的烦恼

mysql - 从表中删除重复记录

php - 在 HTML 页面中回显多行(来自 MySQL 数据库)

excel - 将列拆分为日期和时间

PHP 包括文件 2 目录返回