使用"今天" "前两天"与Oracle约会

时间:2018-04-18 13:22:10

标签: oracle date

我在查询中有以下WHERE子句:

SELECT ...
FROM ...
WHERE IMPORT_DATE between 
     to_date('2018-03-16 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
     to_date('2018-03-16 23:59:59', 'yyyy-mm-dd hh24:mi:ss')

我想写两个新的查询:

  • 使用同一条款,但使用"今天"而不是" 2018-03-16"。
  • 另一个使用相同条款,但使用"前天" (今天 - 2)而不是" 2018-03-16"。

如何在Oracle中执行此操作?

2 个答案:

答案 0 :(得分:2)

由于Oracle没有真正的DATE数据类型且始终包含时间,因此通常最好不要将between用于此类条件,而是一起使用>= <与第二天午夜相比。

要查找&#34;今天&#34;的行使用:

SELECT ...
FROM ...
WHERE import_date >= trunc(sysdate) 
  AND import_date < trunc(sysdate) + 1;

或:

SELECT ...
FROM ...
WHERE import_date >= trunc(sysdate) - 2 
  AND import_date < (trunc(sysdate) - 2) + 1;

在第二个表达式中,括号并不是真正需要的,它们只是用于记录它与第一个表达式相同的表达式。

答案 1 :(得分:1)

select trunc(sysdate) from dual;

今天没有任何时间返回

select trunc(sysdate) - interval '2' day from dual;

在没有时间的情况下返回今天的前2天。

您还可以使用monthhouryear等代替day