提取年份复杂查询 - 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()
每一行的年份在能够实际过滤之前)。
我想根据过去 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()
每一行的年份在能够实际过滤之前)。