2016-11-28 21 views
0

これはちょっと疑問に思えるかもしれませんが、私はめったにSQLを使用しません。2つの日付の間の行?

テーブルEmpl_Transactionsには、DATETIME_INSというdatetime列があります。この列の値は11/28/2016 2:23:00のようになります。

DATETIME_INS列が昨日の日付を持つ行をすべて返したいとします。だから私は次のクエリを試してみましたが、私が探しているものを返すわけではありません。私が思う最初の2つのクエリは、今日の日付の行を返します。

-- 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を必要とするなら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

基本的に、2分後に、私は 'TRUNC'を使うと何も返されませんでした。 – rbhat

関連する問題