SQL : sysdate 减去一个值是如何工作的?

SQL : How sysdate minus a value works?

我在现有项目中找到了以下代码。

select * from mytable where SomeColumn_date >= trunc(sysdate)-.25/24;

SomeColumn_date 的样本值为 22-JUN-17 05:46:55

SomeColumn_date >= trunc(sysdate)-.25/24 如何处理 Date 数据类型?

来自 TRUNC 的文档(我猜你正在使用 Oracle):

The TRUNC (date) function returns date with the time portion of the day truncated to the unit specified by the format model fmt. [...] If you omit fmt, then date is truncated to the nearest day.

trunc(sysdate) 的结果将是没有时间部分的当前日期。现在从中减去 .25/24(实际上意味着 0.25/24)。如果您使用 - 减去日期,则操作数始终以天为单位。 0.25/24 将是一种表示刻钟的形式。

所以 trunc(sysdate)-.25/24 会导致昨天 23:45。

不同的数据库引擎允许对 date 数据类型应用不同的操作。在大多数情况下,<Date Value> +/- 1 操作会对该日期值增加或减少一天。当使用 days.

时,这在语法上等同于 dateadd 函数

在此处的示例中,-.25/24 解析为 -15 minutes 的等效数字,然后从您的日期值中减去该数字。

它本质上是 datedd(min,-15,<Date Value>).

的可读性差得多的版本

好的,这里发生了两件事:

 trunk(date,fmt)

TRUNC(日期)函数 returns 日期,其中一天的时间部分被截断为格式模型 fmt 指定的单位。如果您省略 fmt,则日期将被截断为最近的一天。

所以 如果你假设 22-JUN-17 05:46:55 你得到 22-JUN-17。因为你没有 fmt


DATETIME - .25/24 表示比当前日期时间早 0.25 小时。

但是因为你只有 DATE,所以它所做的只是在今天 12:00 AM 之前的 0.25 小时,即昨天 11:45PM


SomeColumn_date >= trunc(sysdate)-.25/24

所以假设现在是 22-JUN-2017 日期与 21-JUN-2017 11:45 PM

注意:-表示当前时间之前,+表示当前时间之后