Oracle - LAST_DAY 和 TRUNC - 执行顺序

Oracle - LAST_DAY and TRUNC - order of execution

我在使用 LAST_DAYTRUNC 的组合时得到了意想不到的结果:

select LAST_DAY(TRUNC(sysdate, 'DAY')) from dual;
--31-JUL-2021 00:00:00

select TRUNC(LAST_DAY(sysdate), 'DAY')from dual;
--26-JUL-2021 00:00:00

为什么这些调用没有 return 相同的结果?我的意思是,有什么区别:

  1. 我希望今天被截断(去掉小时数)
  2. 然后获取该月的最后一天

  1. 我想要这个月的最后一天(带小时)
  2. 然后去掉小时部分

TRUNC(datestamp, 'DAY') 获取包含 datestamp 的一周的第一天。奇怪但真实。

如果您想要日期戳的日期,只需使用 TRUNC(datestamp)

Oracle 日期戳是底层的浮点数。