SYSDATEといくつかの日付列の違いを取得するこのクエリがあります。DAY = 0のレコードをフィルタリングするには、このクエリに別のフィルターを追加する必要があります。それは可能ですか?
SELECT REQUEST_ID,MIG_STATUS,
EXTRACT(Day FROM( sysdate - START_DATE ) DAY TO SECOND) as Day,
EXTRACT(HOUR FROM( sysdate - START_DATE) DAY TO SECOND) as Hour,
EXTRACT(Minute FROM(sysdate - START_DATE) DAY TO SECOND) as Minute,
EXTRACT(SECOND FROM(sysdate - START_DATE) DAY TO SECOND) as Second
FROM NET_MIG
結果:
T1_ID DAY HOUR MINUTE SECOND
1 2,817 12 12 8
2 2,817 8 26 32
3 0 1 0 0
3 1 8 26 32
3 0 13 0 0
3 0 0 59 0
3 0 0 59 0
Day = 0の場合にフィルターを追加する必要があります
これは正しいアプローチですか?
明確にするために、結果として、日付の差が1日未満のレコードを取得する必要があります。
次を使用できます。
SELECT REQUEST_ID,MIG_STATUS
-- rest of columns
FROM NET_MIG
WHERE START_DATE >= (SYSDATE - 1);
最後のレコードが必要な場合は、次を5 minutes
使用してください。
SELECT REQUEST_ID,MIG_STATUS
-- rest of columns
FROM NET_MIG
WHERE START_DATE >= (SYSDATE - 5 * 1/(24 * 60));
についても同じです1 hour
:
WHERE START_DATE >= (SYSDATE - 1/24);
編集:
同様に、馬との-NO-名@あなたが使用することができますコメントでINTERVAL
:
WHERE START_DATE >= (SYSDATE - INTERVAL '5' MINUTE)
読みやすくするため。
そして@kordirkoコメント:
この解決策はSARG-able
です。これはSTART_DATE
、存在する場合はインデックスを使用EXTRACT(Day FROM( sysdate - START_DATE ) DAY TO SECOND) = 0
し、その列のインデックスをスキップして全表スキャンを実施することを意味します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加