2016-07-08 8 views
0

でOracle DBのための私のクエリは次のとおりです。でTO_DATE、TO_CHARは、Oracle

SELECT NBR, START_TIME,END_TIME, BYTES_DATA 
FROM TABLE_NAME Partition (P201607) 
WHERE BYTES_DATA <> 0 AND NBR LIKE '%29320319%' 

と結果:

NBR   START_TIME   END_TIME   BYTES_DATA 
1029320319 2016-07-01 00:15:51 2016-07-01 00:22:44 158014048 
1029320319 2016-07-01 00:22:51 2016-07-01 01:22:51 616324863 
1029320319 2016-07-01 01:22:51 2016-07-01 01:55:15 431354240 
1029320319 2016-07-01 01:55:22 2016-07-01 02:53:45 1040869155 
1029320319 2016-07-01 02:53:52 2016-07-01 03:53:52 40615861  
1029320319 2016-07-04 07:22:05 2016-07-04 07:22:05 4911 
1029320319 2016-07-05 06:42:56 2016-07-05 07:42:56 58271774 
1029320319 2016-07-05 07:42:56 2016-07-05 07:42:56 173 
1029320319 2016-07-08 07:47:01 2016-07-08 07:47:01 105995 

しかし、私は時間に基づいて、これらの出力をフィルタリングしたいと思います。今月(07)、または7日前にstart_timeとend_timeが06:30:00と07:59:59の間にあるレコードをすべて取得するにはどうすればよいですか?

答えて

1

to_dateまたはto_charのいずれかを使用すると、日付/時刻フィールドを必要な条件に合うように再フォーマットすることができます。開始時や終了時で月が現在の月と同じであるすべてのエントリを表示します
この例:最後の7日間、例えばのための

SELECT NBR, START_TIME,END_TIME, BYTES_DATA 
FROM TABLE_NAME Partition (P201607) 
WHERE BYTES_DATA <> 0 AND NBR LIKE '%29320319%' 
AND ((TO_DATE(START_TIME, 'mm') = TO_DATE(SYSDATE, 'mm') OR 
     (TO_DATE(END_TIME, 'mm') = TO_DATE(SYSDATE, 'mm')) 

変更一致基準
TRUNCキーワード、日付/時刻値からタイムスタンプを削除:

AND ((TO_DATE(START_TIME, 'yyyy/mm/dd') >= (TRUNC(SYSDATE) - INTERVAL '7' days) OR 
     (TO_DATE(END_TIME, 'yyyy/mm/dd') >= (TRUNC(SYSDATE) - INTERVAL '7' days)) 

変更をTO_DATE内の書式マスクは、例えば、時間を指定します
この添加は、開始または終了時刻は午前6時30分00秒と午前7時59分59秒の間にあるエントリをフィルタします:

AND ((TO_DATE(START_TIME,'hh24:mi:ss') BETWEEN 
     TO_DATE('06:30:00','hh24:mi:ss') AND 
     TO_DATE('07:59:59','hh24:mi:ss')) OR 
     (TO_DATE(END_TIME,'hh24:mi:ss') BETWEEN 
     TO_DATE('06:30:00','hh24:mi:ss') AND 
     TO_DATE('07:59:59','hh24:mi:ss')) 

私はこれについての説明/構文と他のOracleの機能にTechOnTheNetが好きです。利用可能なフォーマットパラメータの完全なリストについては、linkを参照してください。

関連する問題