2016-11-28 50 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