2017-07-11 3 views
0

への照会は、前半30分からのみ取られたfetch/selectレコードにします。たとえば、スケジューラが午後2時に実行され、2時30分に再度実行された場合、2:30の実行中に、午後2時から午後2時30分の間に行が選択されるだけで、時間はunixとして格納される列created_timestampエポック形式:レコードをフェッチするレコードは、前の半時間とタイムスタンプをユニックスエポック形式で返します。

|created_timestamp| 
|1497355750350 | 
|1497506182344 | 
+0

created_timestamp列は数値形式 – user3436400

+0

である私はあなたの質問は、[この]の重複しているかなり確信している(https://stackoverflow.com/questions/10555814/を行うことができます変換 - oracles-タイムスタンプ - 秒 - 時代から - エポック)。 – jeff6times7

答えて

2

Oracleの日付で算術演算を行うことができます。ある日付を別の日付から引くと、間隔は分数として与えられます。 86400を乗じると、秒が表示されます。だから、これは現在のUnix expochです:これはあなたのクエリは

select * from your_table 
where created_timestamp >= (:last_run_time - date '1970-01-01') * 86400 

トリックはあなたのスケジューラが前回実行の時に渡す必要があるということであるようなものであることを意味

(sysdate - date '1970-01-01') * 86400 

からlast_run_timeそれ以降追加されたすべてのレコードを取得する。

0

あなたはフラッシュバッククエリ

SELECT * FROM TABLE 
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '30' MINUTE); 
+0

ターゲット列は、Unixエポックタイムスタンプです。その内容はデータベースシステムのタイムスタンプと異なる場合があります – APC

+0

@APCエポック列が必要ですか?それなしでは動作しませんか? – fg78nc

+0

質問は、列の内容に基づいて一連のレコードを取得するよう求めています。 'created_timestamp'がいつどのように投入されるかわからないことを考えると、データベースシステムのタイムスタンプとの正確な対応があることは確かではありません。だからあなたのソリューションは、OPが要求するものとは異なる結果セットを生み出すことができると思います。他に何かを除けば、仕事が5分遅れるとどうなるか考えてみてください。 – APC

関連する問題