我正在寻找正确的查询来检索3个日历年的订单。示例:现在是2023年10月18日,因此我想收集2021年1月1日至2023年10月18日的所有订单。
SELECT *FROM ps_orders oWHERE o.date_add >= DATE_ADD(NOW(),INTERVAL -3 YEAR);
SELECT *
FROM ps_orders o
WHERE o.date_add >= DATE_ADD(NOW(),INTERVAL -3 YEAR);
字符串我试着这样做,但它恢复了整整3年,但我希望它是日历。你有解决办法吗
cuxqih211#
您需要将日期的下限截断为三年前的1月1日:
SELECT *FROM ps_orders oWHERE o.date_add >= CONCAT(YEAR(CURDATE()) - 3, '-01-01') -- Truncates the date to the first of Jan., 3 years ago. Adjust the '3', based on how many years back you need AND o.date_add <= CURDATE(); -- Optional, in case there are dates in the future.
SELECT
*
FROM
ps_orders o
WHERE
o.date_add >= CONCAT(YEAR(CURDATE()) - 3, '-01-01') -- Truncates the date to the first of Jan., 3 years ago. Adjust the '3', based on how many years back you need
AND o.date_add <= CURDATE(); -- Optional, in case there are dates in the future.
字符串注意,MySQL中可能有一个函数可以做到这一点,尽管我不知道。
ghhaqwfi2#
您必须使用间隔,例如BETWEEN
BETWEEN
SELECT *FROM ps_orders oWHERE o.date_add BETWEEN MAKEDATE(year(DATE_ADD(NOW(),INTERVAL -3 YEAR)),1) AND NOW();
WHERE o.date_add BETWEEN MAKEDATE(year(DATE_ADD(NOW(),INTERVAL -3 YEAR)),1) AND NOW();
字符串函数MAKEDATE的工作方式如下
SELECT MAKEDATE(year(DATE_ADD(NOW(),INTERVAL -3 YEAR)),1)
型将返回
2020-01-01
型
2条答案
按热度按时间cuxqih211#
您需要将日期的下限截断为三年前的1月1日:
字符串
注意,MySQL中可能有一个函数可以做到这一点,尽管我不知道。
ghhaqwfi2#
您必须使用间隔,例如
BETWEEN
字符串
函数MAKEDATE的工作方式如下
型
将返回
型