#postgresql
Вопрос:
Я хочу отобразить в представлении Postgres записи, которые превышают 3 календарных года. если сегодняшняя дата-17 сентября 2021 года, то последние 3 календарных года-2018 год. Но мне нужно учитывать только год, а не день/месяц. Итак, последние 3 календарных года-2018, и мне нужно отобразить записи с 01.01.2018.
Я мог бы получить последние 3 года с
select * from table1 where datecolumn >= date_part('year', (now() - '3 year'::interval));
В этом запросе отображаются записи с 17 сентября 2018 года. Но я хочу отобразить записи с 01.01.2018.
Ответ №1:
Альтернатива, которая использует только функцию даты, избегая неявной даты->двойная точность->>строка->>>преобразование даты.
select *
from table1
where datecolumn >= date_trunc('year', (now() - interval '3 years'))::date
Комментарии:
1. Это хорошо сработало. Спасибо!
Ответ №2:
Непроверено на вашем столе, очевидно, но должно сработать:
select
*
from
table1
where
datecolumn >=
('01/01/' || extract('year' from current_date))::date - interval '3 years';
Ответ №3:
Вы можете извлечь часть года из столбца метки времени/даты в виде целого числа и выполнить простое сравнение, например:
WITH sample AS (
SELECT UNNEST(
ARRAY[
'2016-01-01',
'2017-12-12',
'2017-02-02',
'2018-03-03',
'2019-04-04',
'2020-05-05'
] )::TIMESTAMP AS datecolumn
)
SELECT datecolumn
FROM sample
WHERE DATE_PART('YEAR', datecolumn) >= DATE_PART('YEAR', CURRENT_DATE) - 3;
выход:
datecolumn
---------------------
2018-03-03 00:00:00
2019-04-04 00:00:00
2020-05-05 00:00:00
(3 rows)