提取年份复杂查询 - PostgreSQL

Extract year complex query - PostgreSQL

我想根据过去 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]

无效。如何更改我的查询?

您要写的表达式:

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() 每一行的年份在能够实际过滤之前)。