sql - 基于日期范围 Postgresql 返回值时出错
问题描述
我有一个查询要带上每个月最后 5 年的值,它一直有效,直到您在最后一天不同的几个月内到达(例如 31 或 29)
SELECT isin, nominal_comulativo , periodo_base
FROM lamina_perfil
WHERE isin = 'PERFIL 2020'
AND periodo_base >= date '2019-03-31' - INTERVAL '5 years'
AND periodo_base <= '2019-03-31'
我的结果看起来像这样
+----------------+--------------------+--------------+
| ISIN | nominal_comulativo | periodo_base |
+----------------+--------------------+--------------+
| PERFIL 2020 | 1.04 | 2014-03-31 |
+----------------+--------------------+--------------+
| PERFIL 2020 | 2.45 | 2014-04-30 |
+----------------+--------------------+--------------+
| PERFIL 2020 | 1.34 | 2014-05-30 |
+----------------+--------------------+--------------+
| PERFIL 2020 | 1.34 | 2014-06-30 |
+----------------+--------------------+--------------+
| PERFIL 2020 | 1.34 | 2014-07-31 |
+----------------+--------------------+--------------+
| PERFIL 2020 | 1.34 | 2014-08-29 |
+----------------+--------------------+--------------+
但是当我设置 WHERE 条件不同时,比如
period_base> = date '2019-02-31' - INTERVAL '5 years'
AND period_base <= '2019-02-31'
它给了我错误'日期/时间字段值超出范围:“2019-02-31”'
其他人?
解决方案
Postgres 在理解日期间隔方面非常灵活,因此您可以如下表达您的条件:
periodo_base >= date'2019-04-01' - interval '1 day 5 years'
and periodo_base <= date'2019-04-01' - interval '1 day'
这可以缩短一点between
:
periodo_base
between date'2019-04-01' - interval '1 day 5 years'
and date'2019-04-01' - interval '1 day'
推荐阅读
- eclipse - 如何使用 Tycho 自定义 Eclipse 安装?
- python - Unable While Encoding Categorical variable , Futurewarning 显示使用 is_categorical_dtype 代替
- node.js - TypeError:无法读取 setInterval 中未定义的属性“消息”
- visual-studio-code - 如何调用 VSCode 内部的“重命名文件”命令
- javascript - javascript - 在客户端的浏览器中下载文件,然后立即实际下载文件
- windows - 需要修改批处理文件才能处理非 ASCII 文件名
- java - 位图压缩无法减小 PDF 文件大小
- css - 更改内联 css 不会触发转换
- reactjs - 当我构建 docker 映像时,我想阻止在本地目录中安装 node_modules
- c++ - 编译 cocosBuilder 时的 Xcode 错误 - stdlib.h 中的未知类型名称 ldiv_t