2016-11-23 5 views
0

Ich habe eine Datenbank auf meinem lokalen Entwicklungscomputer und es gibt eine Datenbank auf unserem Testserver. Grundsätzlich wurden die Tabellen auf meiner Entwicklungsmaschine von der Testmaschine kopiert.Oracle Date to_char gibt verschiedene Ergebnisse zurück

Allerdings habe ich einen Unterschied gefunden, wie das gleiche Datum von der to_char Funktion behandelt wird. wenn ich auf meinem Entwicklungscomputer die folgende Abfrage:

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

ich die folgenden Ergebnisse erhalten:

31-DEC-99 1999-12-31

auf dem Testserver die gleiche Abfrage für das gleiche Schema und die Daten läuft ich das bekommen folgende:

31-DEC-99 1899-12-31

Könnte dieser Unterschied im Verhalten von to_char aufgrund einer Einstellung, die in den beiden Oracle-Instanzen unterschiedlich ist?

Wenn ich SELECT value FROM v$nls_parameters WHERE parameter ='NLS_DATE_FORMAT'; ausführen bekomme ich DD-MON-RR für beide Instanzen.

+4

Sind Sie sicher, dass die zugrunde liegenden Daten identisch sind? –

+3

Sofern es sich um die ** gleichen Daten handelt, ist dies nicht möglich. –

+0

Können Sie genau beschreiben, wie die Tabelle von der Testmaschine kopiert wurde? –

Antwort

2

Sie haben also den Inhalt der Tabelle im DD-MON-YY-Format in eine CSV-Datei exportiert. YY verursacht offensichtlich Mehrdeutigkeit. Ich denke, dass, wenn Sie die Datei wurden importieren, 99 als 1999 interpretiert wurde anstelle von 1899. ich nicht den genauen Mechanismus weiß, die von Datenbank verwendet wird, um das ganze Jahr zu erraten, aber trotzdem Oracle strongly recommends YYYY in date format:

Hinweis : Oracle empfiehlt, aus den folgenden Gründen anstelle der Elemente des kürzeren Jahres das 4-stellige Jahrelement (YYYY) zu verwenden: Das vierstellige Element Jahr eliminiert Mehrdeutigkeiten.

Die Elemente mit kürzerem Jahr können sich auf die Abfrageoptimierung auswirken, da das Jahr zum Zeitpunkt der Abfragekompilierung nicht bekannt ist und nur unter Laufzeit ermittelt werden kann.

+0

Wenn ich versuchte, den Inhalt der Tabelle als SQL-Insert-Anweisungen zu exportieren, sehe ich, dass '1899-12-31' als' to_date ('31 -DEC-99 ',' DD-MON-RR ') eingefügt wird, was dann wird '1999-12-31' in meiner Entwicklungsdatenbank. * * * 2012-02-23 'wird als' to_date ('23-FEB-12 ',' DD-MON-RR ') eingefügt und wird in meiner Entwicklungsdatenbank zu' 2012-02-23 '. –

Verwandte Themen