【问题标题】:Sql Trunc Math issueSql Trunc 数学问题
【发布时间】:2013-06-21 11:33:45
【问题描述】:

当我使用

select trunc(sysdate) from dual

我得到了正确的日期,今天的格式很好。比如“2013 年 6 月 24 日”

如果我这样做了

select trunc(sysdate)-1 from dual

我昨天的约会格式很好。

但是,如果我这样做:

select trunc(sysdate)- trunc(sysdate-1) from dual

我想得到 1,但我得到的是 /d/yyyy

我要做的就是计算两个日期之间的天数。通过使用 Trunc(date) - Trunc(another date),我总是得到 /d/yyyy 而不是这两个日期之间的天数。

怎么做?

提前致谢。

【问题讨论】:

  • 如果我运行表明您在 SQLPlus 中运行的 SQL 语句,我会得到 1 的结果。您能否编辑您的帖子以包含来自 SQLPlus 会话的剪切和粘贴,以准确显示您正在运行的内容以及您获得的结果。
  • 您的查询应该有效并返回 1,您能否发布您正在使用的实际日期值。 Working demo here

标签: sql oracle


【解决方案1】:

只需使用减号 (-) Oracle 将日期存储为数字和 1 = 1 天

所以 sysdate + 1 是明天,sysdate - 1 是昨天

来自 SQL 小提琴 TRUNC(SYSDATE)-TRUNC(SYSDATE-1) 1

【讨论】:

  • 这就是OP所说的他在做什么?
  • 如果您尝试它,它可以正常工作吗?是否有机会在 SQL Fiddle 上获得失败的示例?
【解决方案2】:

Oracle有一个days_between函数:DAYS_BETWEEN(date1, date2),所以你的查询可以表示为:

select abs(days_between(trunc(sysdate),trunc(sysdate-1))) from dual

我已经包含了 abs() 函数,因为我不记得最近的日期是应该排在第一位还是排在第二位才能获得肯定的结果,并且现在无法检查。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2020-03-23
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
相关资源
最近更新 更多