Oracle获取前一天的记录

Oracle获取前一天的记录,oracle,datetime,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 TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1 FROM Dual YYYY-MM

好的,我想我得到的是前一年而不是前一天,但我需要得到前一天

SELECT TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1 FROM Dual
YYYY-MM-DD HH:MM:SS
我将其与这种格式的日期时间戳进行比较,并希望获得前一天的所有行

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
我在甲骨文公司工作已经有一段时间了。但是,我认为这应该行得通。

sysdate怎么样

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

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

select field,datetime_field 
  from database
 where datetime_field >= trunc(sysdate-1,'DD');
该查询将提供日期从昨天开始的所有行。请注意
trunc()
的第二个参数。您可以使用此选项截断日期的任何部分

如果您的日期时间包含
'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
这个

会有用的。问题是:“datetime_字段”的格式是否与sysdate相同? 我的处理方法是:使用“to_char()”函数(仅适用于Oracle)

样本: 前一天

select your_column
from your_table
where to_char(sysdate-1, 'dd.mm.yyyy')
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(sysdate-1, 'dd.mm.yyyy')
select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate, 'dd.mm.yyyy')

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


从dual中选择(sysdate-1)上一个_日期

简单的解决方案和理解

回答问题:

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

SELECT field,datetime_field 
FROM database
WHERE TO_CHAR(date_field, 'YYYYMMDD') = TO_CHAR(SYSDATE-1, 'YYYYMMDD');
如果您有一个字段不是日期格式,但希望使用日期进行比较,即该字段被视为日期,但采用数字格式,例如20190823(YYYYMMDD)

如果您有一个日期/时间戳格式的字段,需要进行比较,只需更改格式即可

如果要将其返回为最新格式

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格式进行比较

我对这部分“TO_DATE(TO_CHAR(当前日期,'YYYY-MM-DD'),'YYYY-MM-DD')”有点困惑。 你想对这一条款做什么? 结果中显示的格式是运行“从双通道获取日期”基本查询时的默认格式。 除此之外,我在您的查询中执行了此操作,它在前一天检索到
'从双重选择(当前日期-1)'。一定要让我知道它是否适合你,如果不适合,那么一定要告诉我这个问题。谢谢,祝您一切顺利。

假设datetime_字段是日期类型,您的代码应该可以工作。但是,您无缘无故地将日期转换为字符串并返回到日期。使用shahkalpesh的答案。转换的原因是我只想要日期,而不是日期/时间Current_DATE加时间,我只想要dateSYSDATE加时间,我只想要dateTRUNC()漂亮!我不认为使用这个trunc(当前日期)也有效。当前_日期=Oracle会话时区;sysdate=Oracle服务器日期和时间。如果您需要今天创建的记录,请尝试以下操作。。。从数据库中选择字段,其中Trunc(datetime_字段)=Trunc(sysdate)
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