Ich weiß, dass dies ein sehr alter Beitrag mit einer ganzen Reihe von Antworten ist, aber viele Leute denken, dass sie entweder die Dinge auseinandernehmen und wieder zusammensetzen müssen, oder sie bestehen darauf, dass es keine Möglichkeit gibt, die ursprünglich vom Auftraggeber gewünschte Konvertierung durchzuführen.
Um zu überprüfen und hoffentlich eine einfache Antwort für andere mit der gleichen Frage zu bieten, fragte der OP, wie man "10/15/2008 10:06:32 PM" in eine DATETIME konvertieren. Nun, SQL Server hat einige Sprachabhängigkeiten für zeitliche Konvertierungen, aber wenn die Sprache Englisch oder etwas Ähnliches ist, wird dies ein einfaches Problem... machen Sie einfach die Konvertierung und kümmern 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.
![enter image description here]()
Wie sie in der Fernsehwerbung sagen: "Aber warten Sie! Bestellen Sie noch nicht! Für keine zusätzlichen Kosten kann es VIEL mehr!"
Sehen wir uns die wahre Macht der zeitlichen Konvertierungen mit DATETIME an und untersuchen teilweise den als DATETIME2 bekannten Fehler. Sehen Sie sich die verrückten Formate an, die DATETIME automatisch verarbeiten kann und 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 Behandlung aller Arten von seltsamen Zeitformaten, und es ist keine besondere Behandlung erforderlich. Wir mussten nicht einmal die "PM "s entfernen, die den 24-Stunden-Zeiten hinzugefügt wurden. Es ist "PFM" (Pure Freakin' Magic).
Je nach der Sprache, die Sie für Ihren Server ausgewählt haben, werden die Dinge ein wenig anders aussehen, aber vieles davon wird so oder so gehandhabt.
Und diese "selbstmagischen" Umwandlungen sind nichts Neues. Sie reichen sehr weit zurück.
0 Stimmen
stackoverflow.com/a/15121053/1217045
0 Stimmen
Die Frage sollte so bearbeitet werden, dass sie eine allgemeinere Frage zur Konvertierung von einem erwarteten Eingabeformat in ein neues Ausgabeformat stellt. Und die Antworten würden dann nicht nur seine, sondern auch die Fragen aller anderen abdecken. Die Frage ist zwar implizit gestellt, sollte aber explizit gestellt werden. Um keine unnötige Diskussion über die eigentliche Frage zu verursachen.