我看到了很多类似的问题,但我还没有看到一个详细介绍如何获取两年前到今天的记录,但包括两年前的年初。这意味着我想创建一个函数,从两年前的1月1日起,它会一直给我结果。今年的结果将于2020年1月1日至今天公布。
到目前为止,这就是我所拥有的,但实际上我正在将它用作查询中的临时表。
SELECT *
FROM final
WHERE order_date BETWEEN DATEADD(‘year’, -2, current_date) AND current_date
您可以使用DATE_TRUNC
和DATEADD
的组合来查找两年前的1月1日。
SELECT *
FROM final
WHERE order_date BETWEEN DATE_TRUNC('year', DATEADD('year', -2, current_date)) AND current_date;
您所拥有的一切都很接近。只需截断年份。
你可以单独看到发生了什么:
select trunc('2021-03-14 08:24:12'::timestamp, 'YEAR');
-- Output: 2021-01-01 00:00:00.000
添加到您的SQL:
SELECT *
FROM final
WHERE order_date
BETWEEN trunc(DATEADD(‘year’, -2, current_date), 'YEAR') AND current_date
可以使用date_FROM_PARTS:构造任意日期
从表示年、月和日的单个数字组件创建日期。
DATE_FROM_PARTS( <year>, <month>, <day> )
对于当前日期:
SELECT DATE_FROM_PARTS(YEAR(current_date)-2,1,1);
-- 2020-01-01
完整查询:
SELECT *
FROM final
WHERE order_date BETWEEN DATE_FROM_PARTS(YEAR(current_date)-2,1,1) AND current_date
这应该足够了
where year(current_date)-year(order_date)<=2
但如果您有来自未来的订单日期
where year(current_date)-year(order_date)<=2 and order_date<=current_date