Es gibt viele Formate, die von SQL Server unterstützt werden – siehe die MSDN-Onlinedokumentation zu 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 in zwei Varianten unterstützt:
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 festesT
als Trennzeichen zwischen dem Datums- und Uhrzeitteil IhresDATETIME
.
Dies gilt für SQL Server 2000 und neuer.
Verwenden Sie in Ihrem speziellen Fall also diese Zeichenfolgen:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
und Sie sollten in Ordnung sein (Hinweis:Sie müssen die internationale 24-Stunden- verwenden Format anstelle des 12-Stunden-AM/PM-Formats).
Alternativ :wenn Sie SQL Server 2008 verwenden oder neuer, könnten Sie auch den DATETIME2
verwenden Datentyp (statt einfach DATETIME
) und Ihr aktuelles INSERT
würde einfach ohne probleme funktionieren! :-) DATETIME2
ist viel besser und viel weniger wählerisch bei Konvertierungen - und es sind sowieso die empfohlenen Datums-/Zeitdatentypen für SQL Server 2008 oder neuer.
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine
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.