Ich weiß, dass dies ein böser alter Beitrag mit vielen Antworten ist, aber viele Leute denken, dass sie entweder Dinge auseinander brechen und wieder zusammensetzen MÜSSEN oder darauf bestehen, dass es keine Möglichkeit gibt, die vom OP-Original angeforderte Konvertierung implizit durchzuführen .
Um andere mit derselben Frage zu überprüfen und hoffentlich eine einfache Antwort zu geben, fragte das OP, wie man '10 / 15/2008 10:06:32 PM 'in eine DATETIME konvertiert. Jetzt hat SQL Server einige Sprachabhängigkeiten für zeitliche Konvertierungen. Wenn die Sprache jedoch Englisch oder ähnliches ist, wird dies zu einem einfachen Problem. Führen Sie einfach die Konvertierung durch und sorgen Sie sich nicht um das Format. Zum Beispiel (und Sie können CONVERT oder CAST verwenden) ...
SELECT UsingCONVERT = CONVERT(DATETIME,'10/15/2008 10:06:32 PM')
,UsingCAST = CAST('10/15/2008 10:06:32 PM' AS DATETIME)
;
... und das ergibt die folgenden Antworten, die beide richtig sind.
Wie sie in den Fernsehwerbespots sagen: "Aber warten Sie! Bestellen Sie noch nicht! Ohne zusätzliche Kosten kann es VIEL mehr!"
Lassen Sie uns die wahre Kraft zeitlicher Konvertierungen mit DATETIME sehen und den als DATETIME2 bekannten Fehler teilweise untersuchen. Schauen Sie sich die verrückten Formate an, die DATETIME automatisch verarbeiten kann und die DATETIME2 nicht. Führen Sie den folgenden Code aus und sehen Sie ...
--===== Set the language for this example.
SET LANGUAGE ENGLISH --Same a US-English
;
--===== Use a table constructor as if it were a table for this example.
SELECT *
,DateTimeCONVERT = TRY_CONVERT(DATETIME,StringDT)
,DateTimeCAST = TRY_CAST(StringDT AS DATETIME)
,DateTime2CONVERT = TRY_CONVERT(DATETIME2,StringDT)
,DateTime2CAST = TRY_CAST(StringDT AS DATETIME2)
FROM (
VALUES
('Same Format As In The OP' ,'12/16/2001 01:51:01 PM')
,('Almost Normal' ,'16 December, 2001 1:51:01 PM')
,('More Normal' ,'December 16, 2001 01:51:01 PM')
,('Time Up Front + Spaces' ,' 13:51:01 16 December 2001')
,('Totally Whacky Format #01' ,' 16 13:51:01 December 2001')
,('Totally Whacky Format #02' ,' 16 December 13:51:01 2001 ')
,('Totally Whacky Format #03' ,' 16 December 01:51:01 PM 2001 ')
,('Totally Whacky Format #04' ,' 2001 16 December 01:51:01 PM ')
,('Totally Whacky Format #05' ,' 2001 December 01:51:01 PM 16 ')
,('Totally Whacky Format #06' ,' 2001 16 December 01:51:01 PM ')
,('Totally Whacky Format #07' ,' 2001 16 December 13:51:01 PM ')
,('Totally Whacky Format #08' ,' 2001 16 13:51:01 PM December ')
,('Totally Whacky Format #09' ,' 13:51:01 PM 2001.12/16 ')
,('Totally Whacky Format #10' ,' 13:51:01 PM 2001.December/16 ')
,('Totally Whacky Format #11' ,' 13:51:01 PM 2001.Dec/16 ')
,('Totally Whacky Format #12' ,' 13:51:01 PM 2001.Dec.16 ')
,('Totally Whacky Format #13' ,' 13:51:01 PM 2001/Dec.16')
,('Totally Whacky Format #14' ,' 13:51:01 PM 2001 . 12/16 ')
,('Totally Whacky Format #15' ,' 13:51:01 PM 2001 . December / 16 ')
,('Totally Whacky Format #16' ,' 13:51:01 PM 2001 . Dec / 16 ')
,('Totally Whacky Format #17' ,' 13:51:01 PM 2001 . Dec . 16 ')
,('Totally Whacky Format #18' ,' 13:51:01 PM 2001 / Dec . 16')
,('Totally Whacky Format #19' ,' 13:51:01 PM 2001 . Dec - 16 ')
,('Totally Whacky Format #20' ,' 13:51:01 PM 2001 - Dec - 16 ')
,('Totally Whacky Format #21' ,' 13:51:01 PM 2001 - Dec . 16')
,('Totally Whacky Format #22' ,' 13:51:01 PM 2001 - Dec / 16 ')
,('Totally Whacky Format #23' ,' 13:51:01 PM 2001 / Dec - 16')
,('Just the year' ,' 2001 ')
,('YYYYMM' ,' 200112 ')
,('YYYY MMM' ,'2001 Dec')
,('YYYY-MMM' ,'2001-Dec')
,('YYYY . MMM' ,'2001 . Dec')
,('YYYY / MMM' ,'2001 / Dec')
,('YYYY - MMM' ,'2001 / Dec')
,('Forgot The Spaces #1' ,'2001December26')
,('Forgot The Spaces #2' ,'2001Dec26')
,('Forgot The Spaces #3' ,'26December2001')
,('Forgot The Spaces #4' ,'26Dec2001')
,('Forgot The Spaces #5' ,'26Dec2001 13:51:01')
,('Forgot The Spaces #6' ,'26Dec2001 13:51:01PM')
,('Oddly, this doesn''t work' ,'2001-12')
,('Oddly, this doesn''t work' ,'12-2001')
) v (Description,StringDT)
;
Also, ja ... SQL Server verfügt tatsächlich über eine ziemlich flexible Methode zur Verarbeitung aller Arten von seltsamen Zeitformaten, und es ist keine spezielle Behandlung erforderlich. Wir mussten nicht einmal die "PM" entfernen, die zu den 24-Stunden-Zeiten hinzugefügt wurden. Es ist "PFM" (Pure Freakin 'Magic).
Die Dinge variieren ein wenig, abhängig von der SPRACHE, die Sie für Ihren Server ausgewählt haben, aber eine ganze Menge davon wird so oder so behandelt.
Und diese "Auto-Magie" -Konvertierungen sind nichts Neues. Sie gehen einen sehr langen Weg zurück.