Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Es ist nicht möglich, bestimmte datetime-Formate in SQL Server zu speichern

SQL Server speichert kein DateTime in einem beliebigen Zeichenfolgenformat - es wird als 8-Byte-Zahlenwert gespeichert.

Die verschiedenen Einstellungen (Sprache, Datumsformat) beeinflussen nur, wie die DateTime wird Ihnen in SQL Server Management Studio angezeigt - oder wie es analysiert wird, wenn Sie versuchen, eine Zeichenfolge in eine DateTime zu konvertieren .

Es gibt viele Formate, die von SQL Server unterstützt werden – siehe die MSDN-Onlinedokumentation zu CAST und KONVERTIEREN . Die meisten dieser Formate sind abhängig davon ab, welche Einstellungen Sie haben - daher können diese Einstellungen manchmal funktionieren - und manchmal nicht.

Um dies zu lösen, verwenden Sie das ISO-8601-Datumsformat das von SQL Server unterstützt wird - dieses Format funktioniert immer - unabhängig von Ihren SQL Server-Sprach- und Datumsformateinstellungen.

Das ISO-8601-Format wird von SQL Server unterstützt, gibt es in zwei Varianten:

  • YYYYMMDD für reine Datumsangaben (kein Zeitanteil) - hier beachten:keine Bindestriche! , das ist sehr wichtig! YYYY-MM-DD ist NICHT unabhängig von den Datumsformat-Einstellungen in Ihrem SQL Server und NICHT Arbeit in allen Situationen!

oder:

  • YYYY-MM-DDTHH:MM:SS für Datum und Uhrzeit - hier beachten:Dieses Format hat Bindestriche.

Dies gilt für SQL Server 2000 und neuer.

Wenn Sie SQL Server 2008 und das DATE verwenden Datentyp (nur DATE - nicht DATETIME !), dann können Sie zwar auch den YYYY-MM-DD verwenden Format und das funktioniert auch mit allen Einstellungen in Ihrem SQL Server.

Fragt mich nicht, warum dieses ganze Thema so verzwickt und etwas verwirrend ist – es ist einfach so. Aber mit dem YYYYMMDD format, sollten Sie für jede Version von SQL Server und für jede Sprach- und Datumsformateinstellung in Ihrem SQL Server geeignet sein.