2016-11-28 57 views
0

这可能看起来像一个愚蠢的问题,但我很少使用SQL。两个日期之间的行?

我有一个名为DATETIME_INS的日期时间列的表Empl_Transactions。此列的值看起来像这样11/28/2016 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') 
+0

日期时间数据类型包含时间部分,所以如果你只需要日期porti on,然后使用trunc函数...在trunc(DATETIME_INS)= trunc(sysdate) - 1 –

+0

使用TRUNC的问题是,它需要超过2分钟来显示任何结果,其中使用任何过滤器,我已经尝试几乎立即返回数据(即使不正确)。 – rbhat

+0

btw这里没有PL/SQL。 –

回答

4

尝试:

select * from Empl_Transactions WHERE 
DATETIME_INS >= trunc(sysdate)-1 and 
DATETIME_INS < trunc(sysdate) 
0

这是你如何让昨天的日期:

SELECT TRUNC(SYSDATE) - 1 FROM dual; 

为了您的表,查询应该是:

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

这在功能上起作用,但它不能在'datetime_ins'上使用索引。 –

+0

使用'TRUNC'的问题是它需要2分钟才能显示任何结果,因为使用我试过的任何过滤器几乎可以立即返回数据(即使不正确)。 – rbhat

+0

基本上,两分钟后,如果我使用'TRUNC',查询没有返回任何东西。 – rbhat