Oracle 两个日期之间的行?

Oracle 两个日期之间的行?,oracle,Oracle,这似乎是一个愚蠢的问题,但我很少使用SQL 我有一个名为datetime\u INS的datetime列的表Emp\u事务。此列的值类似于2016年11月28日2:23:00 我想返回列DATETIME_INS中包含昨天日期的所有行。因此,我尝试了以下查询,但它们并没有完全返回我要查找的内容。我认为可以工作的前两个查询将返回带有今天日期的行 -- This returns rows inserted today select * from Empl_Transactions WHERE DAT

这似乎是一个愚蠢的问题,但我很少使用SQL

我有一个名为datetime\u INS的datetime列的表Emp\u事务。此列的值类似于2016年11月28日2:23:00

我想返回列DATETIME_INS中包含昨天日期的所有行。因此,我尝试了以下查询,但它们并没有完全返回我要查找的内容。我认为可以工作的前两个查询将返回带有今天日期的行

-- This returns rows inserted today
select * from Empl_Transactions WHERE 
DATETIME_INS >= SYSDATE-1 and DATETIME_INS < SYSDATE 

-- This also returns rows inserted today
select * from Empl_Transactions WHERE 
DATETIME_INS >= CURRENT_DATE-1 and DATETIME_INS < CURRENT_DATE

-- This returns 0 rows
select * from Empl_Transactions WHERE 
DATETIME_INS >= to_date(CURRENT_DATE-1,'DD-MM-YYYY')
and DATETIME_INS < to_date(CURRENT_DATE,'DD-MM-YYYY')

-- works correctly, but I'm using a static value as date
select * from Empl_Transactions WHERE 
DATETIME_INS >= to_date('11/27/2016','MM-DD-YYYY')
DATETIME_INS < to_date('11/28/2016','MM-DD-YYYY')
order by DATETIME_INS asc

-- I get error "Not a valid month"
select * from Empl_Transactions WHERE 
DATETIME_INS >= to_date(CURRENT_DATE-1,'MM-DD-YYYY')
and DATETIME_INS < to_date(CURRENT_DATE,'MM-DD-YYYY')

这就是你得到昨天日期的方式:

SELECT TRUNC(SYSDATE) - 1 FROM dual;
对于您的表,查询应为:

SELECT *
FROM   empl_transactions
WHERE  TRUNC(datetime_ins) = TRUNC(SYSDATE) - 1;

这就是你得到昨天日期的方式:

SELECT TRUNC(SYSDATE) - 1 FROM dual;
对于您的表,查询应为:

SELECT *
FROM   empl_transactions
WHERE  TRUNC(datetime_ins) = TRUNC(SYSDATE) - 1;
尝试:

尝试:


Datetime数据类型也包含时间部分,因此如果您只需要日期部分,则使用trunc函数。。。如:truncDATETIME\u INS=truncsysdate-1使用TRUNC的问题是,显示任何结果需要2分钟以上,而使用我尝试过的任何筛选器,即使不正确,也几乎立即返回数据。顺便说一句,这里没有PL/SQL。@rb问题不在于TRUNC,而是在传递给TRUNC的字段中!TRUNCSYSDATE{Time of OS}与TRUNCCURRENT_DATE不相等,后者是存储在数据库中的一个值,表中的每条记录都有一个值。我认为最好在DATETIME上为表创建一个索引。fieldDatetime数据类型也包含时间部分,因此,如果您只需要日期部分,请使用trunc函数。。。如:truncDATETIME\u INS=truncsysdate-1使用TRUNC的问题是,显示任何结果需要2分钟以上,而使用我尝试过的任何筛选器,即使不正确,也几乎立即返回数据。顺便说一句,这里没有PL/SQL。@rb问题不在于TRUNC,而是在传递给TRUNC的字段中!TRUNCSYSDATE{操作系统时间}与TRUNCCURRENT\u DATE不相等,TRUNCCURRENT\u DATE是存储在数据库中的一个值,表中的每条记录都有一个值。我认为最好在DATETIME\u INS字段上为表创建一个索引。这在功能上是可行的,但在DATETIME\u INS上无法使用索引。使用TRUNC的问题是,显示任何结果需要2分钟以上,其中,使用我尝试过的任何过滤器几乎立即返回数据,即使不正确。基本上,两分钟后,如果我使用TRUNC,查询没有返回任何内容。在这种情况下,您可以创建datetime插件并为其编制索引,如在Emp\u TransactionTruncDateTime上创建索引idx\u TRUNC\u empltrans\u dateins。这在功能上是可行的,但它将无法在datetime\u插件上使用索引。使用TRUNC的问题是它占用了2显示任何结果的分钟数,使用我尝试过的任何过滤器几乎立即返回数据,即使不正确。基本上,两分钟后,如果我使用TRUNC,查询没有返回任何内容。在这种情况下,您可以创建datetime插件并为其编制索引,如在Emp\u transactionsTRUNCdatetime插件上创建索引idx\u TRUNC\u empltrans\u dateins