SQL Server: Warum sind Daten im ISO-8601-Format sprachabhängig?

8

Ich benötige Hilfe beim Verständnis der Verarbeitung von Datumsformaten in SQL Server.

Wenn Sie Folgendes versuchen, wird ein korrektes Ergebnis zurückgegeben:

%Vor%

Dies wird jedoch zu einem Konvertierungsfehler führen, da SQL Server offensichtlich '8' als Tag und '15' als Monat interpretiert:

%Vor%

Ich weiß, dass ich das sprachunabhängige (leicht angepasste ISO-8601) Format YYYYMMDD (ohne Bindestriche) verwenden kann, und es wird in jeder Sprache funktionieren.

Ich verstehe jedoch nicht, warum YYYY-MM-DD sprachabhängig ist, wenn SQL Books eindeutig

sagt

"Die Interpretation hängt von der Kombination von Zeichenfolgenliteralformat, ... und den Standardeinstellungen für Sprachoptionen ab. Einige Zeichenfolgenliteralformate sind von diesen Einstellungen nicht betroffen. ... Das ISO 8601-Format tut dies nicht abhängig von diesen Einstellungen und ist ein internationaler Standard. "

Ссылка

Selbst wenn man sich das Datumsformat ansieht, das von select * from sys.syslanguages zurückgegeben wird, gibt es keine Angabe - das Datumsformat ist dmy , also entspricht es auch nicht dem ISO-8601-Format.

Die Fragen lauten also:

  • Warum ist das ISO-8601-Format sprachabhängig, obwohl in der Online-Dokumentation etwas anderes steht?
  • Wo finde ich das genaue Format, das SQL Server beim Analysieren von ISO-8601-Daten verwendet?

UPDATE:

Lesen Sie weiter unten auf Ссылка , es sagt: Um das Format ISO 8601 zu verwenden, müssen Sie jedes Element im Format angeben. Dies schließt das T, die Doppelpunkte (:), das + oder - und die Punkte (.) Ein (z. B. 2004-05-23T14: 25: 10).

Die Tabelle rechts oben ( Ссылка ) sagt, dass die Numeric ISO 8601 nicht DATEFORMAT abhängig ist, aber es ist auch nicht Multilanguage. Ich bin mir jedoch nicht sicher, wo ich weitere Informationen über den Multilanguage-Teil finden kann - z. B. das genaue Format, das in jeder Sprache verwendet wird.

    
matk 23.01.2014, 08:13
quelle

3 Antworten

2

Diese verwandte Frage könnte bei Sprachen und ISO-8601-Datumsformaten hilfreich sein. Warum interpretiert SQL Server dieses ISO 8601-Format falsch?

Siehe den Artikel Das ultimative Handbuch zu den Datetime-Datentypen , das auch in der Antwort für weitere Informationen verlinkt wurde die Datetime-Typen, die von SQL Server verwendet werden.

    
Ilessa 18.03.2015 14:17
quelle
1

Ich würde annehmen, dass die Abwärtskompatibilität erhalten bleibt. Die neuen Datentypen in SQL Server 2008 datetime2 und date hängen nicht von SET LANGUAGE oder SET DATEFORMAT ab. Hier ist eine Verbinden Sie das Element , um das Verhalten für datetime ebenfalls zu ändern.

    
Mikael Eriksson 23.01.2014 08:26
quelle
0

Schwierig, eine Frage zu beantworten, die mit "Warum" beginnt: -)

Dies beantwortet möglicherweise Ihre Frage nicht, aber für Daten gibt es ein Zeichenfolgenformat, das für ALLE Sprachumgebungen funktioniert: 'JJJJMMTT'

Versuchen Sie:

%Vor%

Dies wird das erwartete Ergebnis liefern.

    
mwelser 20.01.2015 11:54
quelle

Tags und Links