如何解决如何在postgresql中的where条件下使用CASE和between之间
现在,如果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。此查询给我我传递的值错误
解决方法
您可以这样写:
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'
大于{{ 1}})。
如果我理解正确,则可以使用相对简单的比较逻辑:
where oh_year_from <= '2020' and
(oh_year_to = 'CURRENT' or oh_year_to <= '2020')
我认为您尝试使用between
正在使逻辑变得更加复杂。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。