首页 > 解决方案 > 关于 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 更改为上个月的值

标签: databaseoracle

解决方案


假设您的日期可能有非零时间,最好用明确的不等式编写这样的条件,而不是使用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

(即从当月的第一天减去一天


推荐阅读