【问题标题】:Oracle - LAST_DAY and TRUNC - order of executionOracle - LAST_DAY 和 TRUNC - 执行顺序
【发布时间】:2021-10-02 06:56:24
【问题描述】:

使用LAST_DAY 和TRUNC 的组合时,我得到了意想不到的结果:

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

为什么这些调用不会返回相同的结果?我的意思是,有什么区别:

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

和

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

【问题讨论】:

标签: oracle datetime plsql oracle19c


【解决方案1】:

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

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

Oracle 日期戳实际上是浮点数。

【讨论】:

  • 哦,天哪,您对“DAY”部分的看法是绝对正确的:D“DD”是我一直在寻找的……完全错过了。谢谢!
  • @O.琼斯。轻微修正。 Oracle 日期(时间戳)不是浮点数,而是整数的内部字节数组(日期为 7 个字节,时间戳为 11-13 个字节)。 See。您可以瞥见这个正在运行的select sysdate, dump(sysdate) from dual; 日期 算术 与浮点算术一起使用是正确的,因为 1 表示一天,因此半天是 0.5 和四分之一一天为 0.25 等。
猜你喜欢
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多