私はこの Oracle データベースを持っており、この形式の日付のリストがあります: mm/dd/yy 0:00:00 AM/PM
(1 月の場合は 01 ではなく 1、01 の場合は 1 など)。
次のようなクエリを実行すると、次のようになります。
select DATELIST from CORE.DATE_TEST
where to_date(DATELIST) >= to_date('8/27/2015', 'mm/dd/yy') AND to_date(DATELIST, 'mm/dd/yy') <= to_date('9/27/2015', 'mm/dd/yy');
次のエラーが表示されますORA-01843: not a valid month
。27 が有効な月であることもわかりませんが、試してみるとその入力が受け入れられます
予想される日付形式に変更しようとすると:
m/dd/yy
mm/dd/yyyy
m/d/yy
次のエラーが表示されます。ORA-01821: date format not recognized
に切り替えるとdd/mm/yy
、ある程度は機能しますが、実際には機能しません。無効な結果が得られます。
ただし、これは機能します。
select DATELIST from CORE.DATE_TEST
where to_date(DATELIST) >= to_date('8/27/2015', 'mm/dd/yy')
PL/SQL スクリプトは、次の追加で壊れています。
AND to_date(DATELIST, 'mm/dd/yy') <= to_date('9/27/2015', 'mm/dd/yy');
上記のコードをこれに置き換えると:
SELECT to_date(DATELIST, 'dd/mm/yy')
FROM CORE.DATE_TEST
WHERE DATELIST >= to_date('8/27/2015', 'mm/dd/yy')
AND DATELIST <= to_date('9/27/2015', 'mm/dd/yy');
これは機能し、100 万倍高速ですが、日付範囲を正しく解析しません。より小さいか等しい ( <=
) 演算子は8/27/2015
、 との間のデータのみを取得し9/26/2015
ます。2015 年 8 月 27 日から 2015 年 9 月 27 日になるはずではありませんか?
そこで、最後の行を次のように変更します。
AND DATELIST <= to_date('9/27/2015', 'mm/dd/yy') + 1
...そしてそれは機能しますが、私がこれを正しく扱っているようには見えません。
私は何を間違っていますか?また、これを行うためのより良い、より効率的な方法があれば、私はすべて耳にします.