database - 关于 oracle sysdate 到上个月日期的问题
问题描述
OBSERVED_DATE BETWEEN add_months(trunc(sysdate,'mm'),-1) and last_day(add_months(trunc(sysdate,'mm'),-1))
我需要在 01-11-2019 到 30-11-2019 之间运行查询如何将 sysdate 更改为上个月的值
解决方案
假设您的日期可能有非零时间,最好用明确的不等式编写这样的条件,而不是使用between
. 当您需要(几乎在所有情况下)>= 11 月 1 日且 < 12 月 1 日时,Between 包括两端。
相反,如果您写 <= 11 月 30 日(这是您使用between
现在尝试的方式时所做的事情),您将错过该月最后一天 11 月 30 日的所有内容,该日期有时间大于午夜。
该where
子句应如下所示:
...
where observed_date >= add_months(trunc(sysdate, 'mm'), -1)
and observed_date < trunc(sysdate, 'mm')
尽管如此,如果您出于某种原因坚持要获得上个月的最后一天(例如 11 月 30 日),那简直就是
trunc(sysdate, 'mm') - 1
(即从当月的第一天减去一天)。
推荐阅读
- javascript - ReactJS:如何将 knockoutJS 页面包装在 React 组件中
- javascript - 使用 getElementsByClassName 具有多个元素的 HTML Javascript setTimeout
- php - SQLite 将 ID 数组与作为字符串存储在数据库中的 ID 进行比较
- c - 我的代码在结束之前似乎没有运行
- symfony - Symfony webpack“未定义Highcharts”
- terminal - 为什么我无法卸载 CocoaPods?
- java - 从 JTextField 到消息框的用户输入
- mysql - 我有一个子表,它依赖于两个不相关的父表。我想在子表中插入行
- javascript - 在移动设备中滚动时防止标签中的点击事件
- c - 如何在输入时将光标向右推,就像我们在记事本中一样