Oracle获得前一天的记录

时间:2010-03-31 18:18:04

标签: oracle datetime

好吧我想我上一年而不是前一天,但我需要前一天。

SELECT TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1 FROM Dual

我将它与此格式的日期时间标记进行比较,并希望获得前一天的所有行。

YYYY-MM-DD HH:MM:SS

所以我正在尝试这样的事情

SELECT field,datetime_field 
FROM database
WHERE datetime_field > TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1

7 个答案:

答案 0 :(得分:27)

sysdate怎么样?

SELECT field,datetime_field 
FROM database
WHERE datetime_field > (sysdate-1)

答案 1 :(得分:5)

您可以使用TRUNC删除日期的时间部分。

select field,datetime_field 
  from database
 where datetime_field >= trunc(sysdate-1,'DD');

该查询将为您提供从昨天开始的所有日期行。注意trunc()的第二个参数。您可以使用它来截断日期的任何部分。

如果您的datetime_fied包含'2011-05-04 08:23:54',则会返回以下日期

trunc(datetime_field, 'HH24') => 2011-05-04 08:00:00
trunc(datetime_field, 'DD')   => 2011-05-04 00:00:00
trunc(datetime_field, 'MM')   => 2011-05-01 00:00:00
trunc(datetime_field, 'YYYY') => 2011-00-01 00:00:00

答案 2 :(得分:2)

SELECT field,datetime_field 
FROM database
WHERE datetime_field > (CURRENT_DATE - 1)

我曾经在Oracle工作过一段时间。但是,我认为这应该有用。

答案 3 :(得分:2)

这个

    SELECT field,datetime_field 
FROM database
WHERE datetime_field > (sysdate-1)

会奏效。问题是:'datetime_field'的格式是否与sysdate相同? 我的处理方法是:使用'to_char()'函数(仅适用于Oracle)。

样品: 前一天

select your_column
from your_table
where to_char(sysdate-1, 'dd.mm.yyyy')

select extract(day from date_field)||'/'|| 
       extract(month from date_field)||'/'||
       extract(year from date_field)||'/'||
as mydate
from dual(or a_table)
where extract(day from date_field) = an_int_number and
      extract(month from date_field) = an_int_number and so on..

比较日期

select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate, 'dd.mm.yyyy')
昨天和前天之间的

时间范围

select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate-1, 'dd.mm.yyyy') and
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate-2, 'dd.mm.yyyy')

其他时间范围 变体

select your_column
from your_table
where 
to_char(a_datetime_column, 'dd.mm.yyyy') is between to_char(sysdate-1, 'dd.mm.yyyy') 
and to_char(sysdate-2, 'dd.mm.yyyy')

答案 4 :(得分:0)

我认为你也可以执行这个命令:

从dual选择(sysdate-1)PREVIOUS_DATE;

答案 5 :(得分:0)

简单的解决方案和理解

要回答问题:

SELECT field,datetime_field 
FROM database
WHERE TO_CHAR(date_field, 'YYYYMMDD') = TO_CHAR(SYSDATE-1, 'YYYYMMDD');

一些解释

如果您的字段不是日期格式,但要使用日期进行比较,即该字段被视为日期,但为数字格式,例如20190823(YYYYMMDD)

SELECT * FROM YOUR_TABLE WHERE ID_DATE = TO_CHAR(SYSDATE-1, 'YYYYMMDD') 

如果您具有日期/时间戳格式的字段并且需要进行比较,只需更改格式

SELECT TO_CHAR(SYSDATE-1, 'YYYY-MM-DD HH24:MI:SS')  FROM DUAL

如果要将其恢复为日期格式

SELECT TO_DATE(TO_CHAR(SYSDATE-1, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS NEW_DATE  FROM DUAL

结论。

借助此知识,您可以将要比较的文件转换为YYYYMMDD或YYYY-MM-DD或任何年月日格式,然后与相同的sysdate格式进行比较。

答案 6 :(得分:-1)

对于这部分“ TO_DATE(TO_CHAR(CURRENT_DATE,'YYYY-MM-DD'),'YYYY-MM-DD')”有点困惑。 您想对此条款做什么? 当您运行从DUAL获取日期的基本查询时,结果中显示的格式是默认格式。 除此之外,我在您的查询中执行了此操作,并检索了前一天 “选择(CURRENT_DATE-1)from Dual”。让我知道它是否对您有用,如果不能解决,请告诉我有关该问题的信息。谢谢,一切顺利。