danihp が示唆するように、違いはおそらくNLS_LANGUAGE
設定にかかっており、これはおそらくより高い NLS パラメータから派生したものです。グローバリゼーション サポート ガイドで説明されているように、これをオーバーライドして一貫した結果を得ることができます (必ずしも良い考えではありません) 。これらのクエリを実行すると、2 つのサーバーで一貫した結果が得られるはずです (表示されたデータから、そのうちの 1 つがフランス語であると推測されます)。
select to_char(join_date, 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=FRENCH')
from students ...;
select to_char(join_date, 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=ENGLISH')
from students ...;
混乱の根底にあるのは、おそらくあなたがMON
表現しようとしているものです。SQL リファレンスに記載されているように、MON
は「月の省略名」です。つまり、必ずしも 3 文字の省略形であるとは限りません。完全な月名の省略形は、NLS の設定によって異なります。
英語では、すべての月の名前を明確に 3 文字に短縮できます。
select level as l,
to_char(to_date(level, 'MM'), 'Month', 'NLS_DATE_LANGUAGE=ENGLISH'),
to_char(to_date(level, 'MM'), 'Mon', 'NLS_DATE_LANGUAGE=ENGLISH')
from dual
connect by level <= 12
order by 1
L TO_CHAR(TO_DATE(LEVEL,'MM'),'MONTH', TO_CHAR(TO_D
---------- ------------------------------------ ------------
1 January Jan
2 February Feb
3 March Mar
4 April Apr
5 May May
6 June Jun
7 July Jul
8 August Aug
9 September Sep
10 October Oct
11 November Nov
12 December Dec
フランス語ではそうではありません:
select level as l,
to_char(to_date(level, 'MM'), 'Month', 'NLS_DATE_LANGUAGE=FRENCH'),
to_char(to_date(level, 'MM'), 'Mon', 'NLS_DATE_LANGUAGE=FRENCH')
from dual
connect by level <= 12
order by 1;
L TO_CHAR(TO_DATE(LEVEL,'MM'),'MONTH', TO_CHAR(TO_DATE(LEVE
---------- ------------------------------------ --------------------
1 Janvier Janv.
2 Février Févr.
3 Mars Mars
4 Avril Avr.
5 Mai Mai
6 Juin Juin
7 Juillet Juil.
8 Août Ao
9 Septembre Sept.
10 Octobre Oct.
11 Novembre Nov.
12 Décembre Déc.
明らかに、3 文字の略語を使用すると、Juin と Juillet にとって困難が生じます。おそらく、略語をピリオドで表すことは文化的なものであり、月によっては 4 文字を区別する必要があるため、MON
フォーマットの長さが最大 5 文字になります。
書式モデルがそれを固定幅として保持することは少し驚くかもしれません。そのため、元のデータのように、短い略語のために中央にスペースがあります。どちらの方法でも議論できると確信しており、一貫して適用されているようです. それを自動的に停止する方法を知りません。