这可能看起来像一个愚蠢的问题,但我很少使用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')
日期时间数据类型包含时间部分,所以如果你只需要日期porti on,然后使用trunc函数...在trunc(DATETIME_INS)= trunc(sysdate) - 1 –
使用TRUNC的问题是,它需要超过2分钟来显示任何结果,其中使用任何过滤器,我已经尝试几乎立即返回数据(即使不正确)。 – rbhat
btw这里没有PL/SQL。 –