2017-12-19 13 views
0

現在、1つの列を使用して1分ごとに抽出していますが、その分のデータが挿入されていないため、数分をスキップします。SQL TRUNC Sysdateからの分

出力以下が必要です。私は取得しています何

12-19-2017 02:23:00 
12-19-2017 02:24:00 
12-19-2017 02:25:00 
12-19-2017 02:26:00 
12-19-2017 02:27:00 
12-19-2017 02:28:00 
12-19-2017 02:29:00 
12-19-2017 02:30:00 
12-19-2017 02:31:00 
12-19-2017 02:32:00 
12-19-2017 02:33:00 
12-19-2017 02:34:00 

(現在時刻は13:11

12-19-2017 13:11:00 
12-19-2017 13:11:00 
12-19-2017 13:11:00 
12-19-2017 13:11:00 
12-19-2017 13:11:00 
12-19-2017 13:11:00 
12-19-2017 13:11:00 
12-19-2017 13:11:00 
12-19-2017 13:11:00 
12-19-2017 13:11:00 
12-19-2017 13:11:00 
12-19-2017 13:11:00 

クエリ

SELECT TRUNC(SYSDATE,'MI') AS TIME_STAMP From Table where SYSDATE >= sysdate - 1; 
+0

どのdbmsを使用していますか?そのクエリは製品固有のものです。 – jarlh

+0

@ jarlh Oracle RDBMS – user206168

+0

だから何をしたいですか?テーブルに何分も表示されていない場合でも、1分のステップで日付と時間のリストが表示されます。 – Dmitry

答えて

3

私の開始時間は、私は毎分の出力を見たいと思って昨日の深夜から今までだった場合。

あなたはSYSDATEに基づいて値の範囲を生成する場合は、あなたではなく、実際のテーブルを参照することよりも、dualテーブルに対して、階層クエリを使用します。

select trunc(sysdate - 1) + (level - 1)/1440 as result 
from dual 
connect by level <= (sysdate - trunc(sysdate - 1))*1440 
order by result; 

RESULT 
------------------- 
2017-12-18 00:00:00 
2017-12-18 00:01:00 
2017-12-18 00:02:00 
2017-12-18 00:03:00 
... 
2017-12-18 23:57:00 
2017-12-18 23:58:00 
2017-12-18 23:59:00 
2017-12-19 00:00:00 
2017-12-19 00:01:00 
2017-12-19 00:02:00 
2017-12-19 00:03:00 
... 
2017-12-19 14:21:00 
2017-12-19 14:22:00 
2017-12-19 14:23:00 

これはtrunc(sysdate - 1)にを使用しています昨日真夜中を起点とする。現在と今の間の分数を(sysdate - trunc(sysdate - 1))*1440)と計算します。その限界に達するまで開始時間に1分を追加するためにconnect-by構文を使用します。

(それが次第だが、現在の分を含めていない。あなたにも、ちょうど終了条件の最後に1を追加することを望む場合。)

あなたが本当にで終わるしたい内容に応じてそれらをCTEまたはインラインビューとして使用して、すべての分を生成し、実際の表に左結合して、一致するデータがある場合はそれを見つけることができます。


ユーザーが開始と終了の時間を提供したい場合は、変数としてそれらを渡すことができ、何かのように:

select trunc(:start_time, 'MI') + (level - 1)/1440 as result 
from dual 
connect by level <= (:end_time - :start_time)*1440 
order by result; 
:start_time、ここ :end_timeはあなたが開始と移入バインド変数をある

そして終了時間。正確な仕組みは、値がユーザーからクエリにどのように伝わるかによって異なります。 SQL * PlusまたはSQL Developerワークシートでは、それらを文字列として取得し、これらの文字列を日付に変換(明示的)する必要があります。 Javaアプリケーションからは、日付データ型を直接バインドすることができます。

+0

これはまさに私が探していたものです、あなたは素晴らしいです。ありがとうございます – user206168

+0

1つの質問、私はデュアルから使用してOKです。ユーザーがRESULTの開始時刻と終了時刻を選択するためのwhere句を追加するにはどうすればよいですか? – user206168

+0

@ user206168 - これを行う方法の簡単なアイデアを追加しました。明確でない場合は、ユーザーがデータを入力する方法や、クエリに到達するまでにどのデータ型であるかなど、新しい質問をする必要があります。 –

1

問題があるさ:あなたはいつも

により、今日のすべての行のためにあなたのテーブルから同じ時間(SYSDATE)を選択しています

SELECT TRUNC(SYSDATE,'MI') AS TIME_STAMP From myTable where SYSDATE >= sysdate - 1; 

は、としてクエリを書き換えしよう

(比較時間0213、私はhh代わりのhh24でフォーマットすることを決めた)

+0

申し訳ありませんが、24時間のHRクロックは問題ではないと言わざるを得ないでしょう。私が抽出できないのは、「SYSDATE」から毎分です。私の開始時間が昨日の深夜から今のところだったら、毎分の出力を見たいと思う。 – user206168

+0

@ user206168あなたはテーブルを持っていて、それの日付カラムの1つにデータが入っていると思いますか?テーブル構造を共有できますか? –