我在现有项目中找到了以下代码。
select * from mytable where SomeColumn_date >= trunc(sysdate)-.25/24;
SomeColumn_date
的示例值为22-JUN-17 05:46:55
SomeColumn_date >= trunc(sysdate)-.25/24
如何处理日期数据类型?
答案 0 :(得分:1)
来自TRUNC
的文档(我猜你使用的是Oracle):
TRUNC(日期)函数返回日期,截断日期的时间部分为格式模型fmt指定的单位。 [...]如果省略fmt,则日期将被截断为最近的一天。
trunc(sysdate)
的结果将是没有时间组件的当前日期。现在.25/24
(实际上意为0.25/24
)从中减去。如果使用-
减去日期,则操作数始终为天。 0.25/24
将是一种表达四分之一小时的表格。
所以trunc(sysdate)-.25/24
将导致昨天23:45。
答案 1 :(得分:1)
不同的数据库引擎允许将不同的操作应用于date
数据类型。在大多数情况下,<Date Value> +/- 1
的操作会在该日期值中添加或减去一天。在使用dateadd
时,这在语法上等同于days
函数。
在此示例中,-.25/24
解析为相当于-15 minutes
的数字,然后从您的日期值中扣除。
它基本上是datedd(min,-15,<Date Value>)
的可读性较低的版本。
答案 2 :(得分:0)
好的,这里发生了两件事:
trunk(date,fmt)
TRUNC(日期)函数返回日期,截断日期的时间部分为格式模型fmt指定的单位。如果省略fmt,则日期将被截断为最近的一天。
所以如果你假设22-JUN-17 05:46:55你得到22-JUN-17 。因为你没有fmt
DATETIME - .25/24
表示您当前日期时间之前.25小时。
但是因为你只有DATE所有它是在今天的12:00之前的0.25小时,即昨天的晚上11:45
SomeColumn_date >= trunc(sysdate)-.25/24
因此,假设现在的22-JUN-2017日期与2017年6月21日晚上11:45进行比较
注意: - 用于当前时间之前,+用于当前时间之后