私は23:00から翌日01:00まで毎日イベントを発生させる必要がある状況があります。 Oracleの2つのフィールド間の現在の時刻を確認
Start date | EndDate
31-05-2016 23:00:00 | 01-06-2016 01:00:00
が既にデータベースがこのように設計されており、アプリケーションが生きている: 私のテーブルには、次のようになります日付のデータを持っています。今、私は
BETWEEN
ステートメントを使用してデータを取得しようとしましたが、ENDDateが翌日の朝であるため、何も必要としません。
このデータを正しく抽出する方法を教えてもらえますか?
マイORACLE
クエリ
SELECT COUNT(*) INTO P_OUTPUT FROM MAINTENANCE_LOG WHERE
NVL(RECCURING_TYPE,'O')='D' AND ACTIVE_STATUS='Y' AND
TO_CHAR(SYSDATE,'HH24MISS') BETWEEN TO_CHAR(START_DATE,'HH24MISS') AND TO_CHAR(END_DATE,'HH24MISS');
は、私は再び日付にこれを変換しようとしたが、それはまた、終了日では動作しません。
更新: 私の要件では、現在の時刻が開始日と終了日の間であるかどうかを確認するだけで済みます。毎日このクエリを実行する必要があり、毎日23:00から1:00の間にアクティビティを実行する必要があります。
注:31-05-2015にSysdate between startdate and enddate
というクエリを実行すると、真/偽になります。しかし、もし私が夜にこの翌日を走らせると、EndDateはすでに終わっているので、私は偽になるでしょう。だから、私は日付のクエリの間に通常を使用することはできません。
は、なぜあなたは日付フィールドをto_charingとの間で使用していますか?それらをto_charしないでください。 startddateとend_dateの間のsysdateを単純に比較します。エンジンにTEXT値の比較を依頼しています。それはondatesを行うべきではありません... – xQbert
'startddateとend_dateの間の' sysdateについてはどうですか? –
なぜ私はTo_CHARをやっているのですか?私のデータには日付がありますが、現在の時刻は23:00から01:00の間だけです。それは私にそれに基づいてカウント(*)を与える必要があります。 – smilu