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:
YYYYMMDDfür nur Daten (kein Zeitanteil); Beachten Sie hier: keine Striche! , das ist sehr wichtig! YYYY-MM-DDist NICHT unabhängig von den Datumsformateinstellungen in Ihrem SQL Server und funktioniert NICHT in allen Situationen!
oder:
YYYY-MM-DDTHH:MM:SSTermine und Zeiten - Anmerkung hier: Dieses Format hat Striche (aber sie können weggelassen werden), und ein Fest Tals 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 DATETIME2Datentyp (anstelle von normal DATETIME) verwenden, und Ihr aktueller Datentyp INSERTfunktioniert problemlos! :-) DATETIME2ist 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 YYYYMMDDFormat sollten Sie jedoch für jede Version von SQL Server und für jede Sprach- und Datumsformateinstellung in Ihrem SQL Server in Ordnung sein.