SQL:sysdate如何减去一个值?

时间:2017-06-22 09:48:53

标签: sql oracle where-clause

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

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

SomeColumn_date的示例值为22-JUN-17 05:46:55

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

3 个答案:

答案 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进行比较

注意: - 用于当前时间之前,+用于当前时间之后