如何在postgresql中使用CASE和Between in where条件一年
Posted
技术标签:
【中文标题】如何在postgresql中使用CASE和Between in where条件一年【英文标题】:How to use CASE and Between in where condition for a year in postgresql 【发布时间】:2020-09-29 07:26:03 【问题描述】:我有以下数据
现在如果 oh_year_to 有 Current 这个词,那么我必须将它用作当前年份,如果写有年份,那么它应该考虑写在列上的内容
所以我正在尝试检查以下查询,但它确实给了我错误
SELECT "oh_new_make"
FROM public.make_override_history
CASE
WHEN oh_year_to = 'CURRENT'
('2020' BETWEEN "oh_year_from" AND '2020')
ELSE
('2020' BETWEEN "oh_year_from" AND "oh_year_to")
GROUP BY "oh_new_make"
基本上我想要 2020 年的所有 new_makes。这个查询在我传递的值处给了我错误
【问题讨论】:
【参考方案1】:你可以这样写:
where oh_year_from
between '2020'
and case when oh_year_to = 'CURRENT' then '2020' else oh_year_to end
你也可以使用布尔逻辑:
where
oh_year_from <= '2020'
and (oh_year_to = 'CURRENT' or (oh_year_to <> 'CURRENT' and oh_year_to >= '2020')
请注意,此处使用字符串比较相当棘手 - 如果您将 oh_year_to
设置为 3
,则条件将成功(因为从字符串角度来看,'3'
大于 '2020'
)。
【讨论】:
【参考方案2】:如果我理解正确,你可以使用比较简单的比较逻辑:
where oh_year_from <= '2020' and
(oh_year_to = 'CURRENT' or oh_year_to <= '2020')
我认为您尝试使用 between
会使逻辑更加复杂。
【讨论】:
以上是关于如何在postgresql中使用CASE和Between in where条件一年的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PostgreSQL、PL/pgSQL 上执行匿名代码块切换 CASE 语句?