Отображение записей за последние 3 календарных года в представлении PostgreSQL

#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)