Es gibt viele Formate, die von SQL Server unterstützt werden - siehe die MSDN Books Online zu CAST und CONVERT . Die meisten dieser Formate hängen davon ab, welche Einstellungen Sie haben - daher funktionieren diese Einstellungen manchmal - und manchmal auch 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 Ihrer SQL Server-Sprache und den Datumsformateinstellungen.
Das von SQL Server unterstützte ISO-8601-Format gibt es in zwei Varianten:
YYYYMMDD
für nur Daten (kein Zeitanteil); Beachten Sie hier: keine Striche! , das ist sehr wichtig! YYYY-MM-DD
ist NICHT unabhängig von den Datumsformateinstellungen in Ihrem SQL Server und funktioniert NICHT in allen Situationen!
oder:
YYYY-MM-DDTHH:MM:SS
Termine und Zeiten - Anmerkung hier: Dieses Format hat Striche (aber sie können weggelassen werden), und ein Fest T
als Trennzeichen zwischen dem Datum und der Zeit Teil Ihrer DATETIME
.
Dies gilt für SQL Server 2000 und höher.
Verwenden Sie in Ihrem konkreten Fall die folgenden Zeichenfolgen:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
und es sollte Ihnen gut gehen (Hinweis: Sie müssen hierfür das internationale 24-Stunden- Format anstelle des 12-Stunden-AM / PM-Formats verwenden).
Alternativ : Wenn Sie mit SQL Server 2008 oder neuer arbeiten, können Sie auch den DATETIME2
Datentyp (anstelle von normal DATETIME
) verwenden, und Ihr aktueller Datentyp INSERT
funktioniert problemlos! :-) DATETIME2
ist viel besser und bei Konvertierungen viel weniger wählerisch - 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
Fragen Sie mich nicht, warum dieses ganze Thema so knifflig und etwas verwirrend ist - so ist es eben. Mit dem YYYYMMDD
Format sollten Sie jedoch für jede Version von SQL Server und für jede Sprach- und Datumsformateinstellung in Ihrem SQL Server in Ordnung sein.