0

私の問題は日付型に関連しています。列に日付を割り当てたい場合は、以下のコードを使用しています。D_REPORT := to_date(sysdate,'DD/MM/YYYY HH:MI:SS AM');

しかし、時々私は 31/01/0013 12:24:36 のような日付を受け取ります!!

年が 0013 のように表示されることがある理由がわかりません。sysdate を使用している場合でも、一部のシステムで同じ問題が発生します。

私はあなたに確認したいのですが、他にも同じ問題を抱えている人はいますか?どうすれば解決できますか?to_date を使用したり、単に sysdate を書いたりしても、同じ問題が発生し、問題の根本的な原因がわからないためです。

私は oracle form 6i を使用しており、データベースは oracle 9i です。

4

1 に答える 1

3

日付には使用しないでくださいto_date(and sysdateis a date)。

TO_DATE はvarchar2パラメータとして取得するため、Oracle は暗黙的に日付 (sysdate) を NLS_DATE_FORMAT に従って varchar2 に変換しますが、これ'DD/MM/YYYY HH:MI:SS AM'はすべての環境にあるとは限りません。

NLS_DATE_FORMAT が 'DD/MM/YY HH:MI:SS AM' の場合、実際には次のようなことが起こるため、year=0013 になります。

SELECT  to_date(TO_CHAR(sysdate, 'DD/MM/YY HH:MI:SS AM'),'DD/MM/YYYY HH:MI:SS AM')
FROM dual;

したがって、挿入するだけで、sysdate表示する(文字列に変換する)ときに使用するだけですto_char(sysdate,'DD/MM/YYYY HH:MI:SS AM')

ここにsqlfiddleのデモがあります

于 2013-01-09T06:35:59.673 に答える