2

私はこのSQLクエリを使用しています:

select sysdate, sysdate - INTERVAL '6' month from dual;

しかし、次のように返されます: ORA-01839: 指定された月に対して日付が無効です。

数字を9に変更すると、日付が返されるため、これは奇妙です(sysdate = 31/05/11で、減算は31/08/10です)。また、別の値を使用してみました: 1,3,6,8,11 も機能しませんが、2,4,5,7,9,12 は機能しています。

数字からすると、結果のクエリにその月の 31 日がないためだと思います。これは予想される動作ですか?MySQL では、クエリ (select now() - Interval 6 Month;) を使用して正しい値を取得できるためです。他に方法はありますか?

Oracle 11.1.0.6 を使用しています

4

2 に答える 2

3

これは予想される動作です。ドキュメントの日時/区間演算セクションの6番目の箇条書きを参照してください。

リサが言うように、あなたはadd_months逆の振る舞いをするを使うことができます-それは時々混乱を引き起こすこともあります。どちらが自分に最も適しているかを判断する必要があります。

于 2011-05-31T07:09:59.613 に答える
2
select sysdate,add_months(sysdate,-6) from dual;
于 2011-05-31T07:03:31.503 に答える