2016-11-23 10 views
0

ローカル開発マシンにデータベースがあり、テストサーバーにデータベースがあります。基本的に、私の開発マシン上のテーブルはテストマシンからコピーされました。Oracle日付to_char異なる結果を返す

ただし、同じ日付がto_char関数でどのように処理されるかに違いがあることがわかりました。私は次のような結果を得る

select test_date, to_char(test_date, 'YYYY-MM-DD') 
from test.table 
where id = 'C0007784' 

:私は次のクエリを実行する場合、私の開発マシン上で同じスキーマとデータに対して同じクエリを実行しているテストサーバーで

31-DEC-99 1999-12-31

を私が取得します次

31-DEC-99 1899-12-31

でしto_charの動作の違い2つのOracleインスタンスで設定が異なるためですか?

SELECT value FROM v$nls_parameters WHERE parameter ='NLS_DATE_FORMAT';を実行すると、両方のインスタンスでDD-MON-RRが得られます。

+4

基礎となるデータが同じであることを確認してください。 –

+3

これは**同じデータです**これはできません。 –

+0

テーブルがテストマシンからどのようにコピーされたかを正確に記述できますか? –

答えて

2

DD-MON-YY形式を使用して、テーブルの内容をcsvファイルにエクスポートしました。 YYは明らかにあいまいさを引き起こす。

注:私はとにかくオラクルstrongly recommends YYYY in date format私は通年を推測するためにデータベースが使用される正確なメカニズムを知らないあなたは、ファイルをインポートしたところ、99が1999の代わりに、1899年と解釈されたことを推測するが、 :これらの理由により、より短い年の要素ではなく、4桁の年の要素(YYYY) を使用することをお薦めします。4桁の 年要素は、あいまいさを排除します。

年がクエリのコンパイル時に認識されず、実行時間が であるため、より短い年の要素がクエリの最適化に影響することがあります。

+0

テーブルの内容をSQLの挿入文としてエクスポートしようとしたとき、 'to_date('31 -DEC-99 '、' DD-MON-RR ')'として '1899-12-31'が挿入されています。 '1999-12-31'を私の開発データベースに追加しました。 * 'to_date('23 -FEB-12 '、' DD-MON-RR ')'として '* 2012-02-23'が挿入され、開発データベースには' 2012-02-23 'となります。 –

関連する問題