Извлечь год сложным запросом - PostgreSQL - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу отфильтровать свои действия на основе значений многокомпонентного списка за последние 4 года. Я могу сделать запрос к базе данных, если предоставлю только один год.

SELECT * FROM public.events WHERE (EXTRACT(YEAR from start_date)) = 2019

Однако я не совсем уверен, как я могу дать запрос, если я хочу фильтровать по нескольким годам

SELECT * FROM public.events WHERE (EXTRACT(YEAR from start_date)) IN [2019, 2020]

не работает. Как я могу изменить свой запрос?

1 Ответ

1 голос
/ 02 апреля 2020

Выражение, которое вы хотели написать:

WHERE EXTRACT(YEAR from start_date) IN (2019, 2020)

То есть IN ожидает список в скобках, а не в квадратных скобках.

Но я бы фактически предложил использовать явное сравнение диапазонов вместо этого:

where start_date >= '2019-01-01'::date and start_date < '2021-01-01'::date

Преимущество этого подхода состоит в том, что он SARGeable, то есть он может использовать индекс по столбцу start_date (в то время как исходное выражение должно extract() год от каждого и каждая строка, прежде чем можно будет отфильтровать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...