1

私のアプリケーションでは、次のコマンドを使用して、セッションの NLS_DATE_FORMAT を設定して、プログラムによって返されるすべての日付をフォーマットしています。

alter session set nls_date_format='DY DDTH MON YYYY';

これは次のような日付を返すはずです: 'Fri 23rd Aug 2013'

ただし、次のクエリを実行すると:

select SYSDATE from dual;

「2013 年 8 月 23 日金曜日」という形式で日付を取得します。「23」の後に「rd」がないことに注意してください。

次のクエリを実行すると:

select to_char(sysdate, 'DY DDTH MON YYYY') from dual;

日付は目的の形式で返されます。では、NLS_DATE_FORMAT を使用して設定すると、'TH' 日付形式パラメーターが機能しないのはなぜですか? また、NLS_DATE_FORMAT ではなく TO_CHAR を使用する場合に機能する他の日付形式パラメーターはありますか?

ご協力いただきありがとうございます

ちなみに、Oracle 11.2 のクライアントとデータベースを使用しています。

アップデート

SQL Developer内からalter sessionコマンドを実行していました。これを SQL PLUS で試したところ、正しい形式で日付が返されました。ただし、フォーマットされた日付の挿入に問題があります。

(上記のように NLS_DATE_FORMAT を設定した後に) 次の操作を行うと、「ORA-01861 リテラルがフォーマット文字列と一致しません」というエラーが表示されます。

INSERT INTO DATE_TABLE (MY_DATE_COL) VALUES ('Thu 18th Apr 2013');

NLS_DATE_FORMAT を設定した後、それが機能すると思いますか?

挿入ステートメントを次のように変更すると:

INSERT INTO DATE_TABLE (MY_DATE_COL) VALUES ('Thu 18 Apr 2013');

それならうまくいく!どうしてこれなの?

4

3 に答える 3

1

次のように、文字列リテラル'Thu 18th Apr 2013'をデータ型の列に挿入できます (フォーマット モデルを二重引用符でDATE囲みます)。th

INSERT INTO DATE_TABLE (MY_DATE_COL) 
  VALUES (to_date('Thu 18th Apr 2013', 'Dy DD"th" Mon YYYY'));
于 2013-08-23T09:02:34.397 に答える
1

alter session ステートメントにタイプミスがあります。最初に DD の代わりに DY を設定します

alter session set nls_date_format='DY DDTH MON YYYY';
于 2013-08-23T08:33:53.727 に答える