繁体   English   中英

关于oracle sysdate 到上个月日期的问题

[英]question regarding oracle sysdate to last month date

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 日时。

相反,如果您写 <= 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

(即,减去从当前月份的第一天一天)。

还有另一个函数返回该月的最后一天。 last_day

所以你的情况应该是这样的:

where observed_date 
      between add_months(trunc(sysdate, 'mm'), -1)
      and last_day(add_months(sysdate, -1))

干杯!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM