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

Konvertierungsfehler beim Konvertieren von „nvarchar“ in „datetime“ im SQL-Server

Es gibt viele Formate, die von SQL Server unterstützt werden – siehe die MSDN Books Online auf CAST und CONVERT . 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 (leicht angepasste) 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 nur Daten (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 (aber sie können weggelassen werden) und ein festes T als Trennzeichen zwischen dem Datums- und Uhrzeitteil Ihres DATETIME .

Dies gilt für SQL Server 2000 und neuer.

Wenn Sie SQL Server 2008 oder neuer verwenden und das DATE 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.

Die Empfehlung für SQL Server 2008 und höher lautet, DATE zu verwenden wenn Sie nur den Datumsteil benötigen, und DATETIME2(n) wenn Sie sowohl Datum als auch Uhrzeit benötigen. Sie sollten versuchen, DATETIME auslaufen zu lassen Datentyp, wenn immer möglich