Angenommen, die Datenbank ist MS SQL Server 2012 oder höher, dann ist hier eine Lösung, die funktioniert. Die grundlegende Anweisung enthält die Inline-Try-Parse:
SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
Folgendes haben wir in der Produktionsversion implementiert:
UPDATE dbo.StagingInputReview
SET ReviewedOn =
ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
-- Check for empty/null/'NULL' text
WHERE not ReviewedOnText is null
AND RTrim(LTrim(ReviewedOnText))<>''
AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';
Die Spalten ModifiedOn und ModifiedBy dienen nur der internen Datenbankverfolgung.
Siehe auch diese Microsoft MSDN-Referenzen:
Obwohl das CONVERT-Ding funktioniert, sollten Sie es eigentlich nicht verwenden. Sie sollten sich fragen, warum Sie Zeichenfolgenwerte in SQL-Server analysieren. Wenn dies ein einmaliger Job ist, bei dem Sie einige Daten manuell reparieren, erhalten Sie diese Daten ein anderes Mal nicht. Dies ist in Ordnung. Wenn jedoch eine Anwendung dies verwendet, sollten Sie etwas ändern. Am besten verwenden Sie den Datentyp "Datum". Wenn dies Benutzereingaben sind, ist dies noch schlimmer. Dann sollten Sie zuerst den Client einchecken. Wenn Sie wirklich Zeichenfolgenwerte übergeben möchten, bei denen SQL-Server ein Datum erwartet, können Sie immer das ISO-Format ('JJJJMMTT') verwenden, das automatisch konvertiert werden soll.
quelle
Sie können verwenden:
Referenz: CAST und CONVERT (Transact-SQL)
quelle
wird tun, was benötigt wird, Ergebnis:
quelle