Konvertieren des varchar-Datumsfelds in den datetime-Datentyp [duplizieren]

Dec 16 2020

Ich habe den Fehler gemacht, varchar zum Speichern meiner Daten zu verwenden, die Datum / Uhrzeit darstellen. Jetzt versuche ich, meine als varchar gespeicherte Spalte mit Textdaten wie folgt zu konvertieren:

2020-11-25T14:22:41.3539327Z

In einer Spalte, in der ein Datetime-Datentyp gespeichert ist.

Antworten

1 Larnu Dec 16 2020 at 02:49

Vorausgesetzt, alle Ihre Daten haben das Format yyyy-MM-ddThh:mm:ss.nnnnnnn, können Sie einfach den Datentyp der Spalte ändern:

ALTER TABLE dbo.YourTABLE ALTER COLUMN YourColumn datetime2(7);

Wenn Sie dort die Zeitzone benötigen, verwenden Sie datetimeoffset(7)stattdessen.

Brad Dec 16 2020 at 02:33
-- to fix it you can use convert, below uses GetDate for examaple
SELECT convert(varchar, getdate(), 120)

Je nachdem, welche Präzision Sie benötigen, können Sie den folgenden Link verwenden, um sie zu finden und die 120 auf die für diese Präzision erforderliche Zahl zu ändern.

https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/

Um Ihre Tabelle zu reparieren, sollten Sie die folgenden Schritte ausführen:

  1. Fügen Sie Ihrer Tabelle eine neue Spalte für DateTime hinzu
  2. Führen Sie eine Aktualisierung Ihrer Tabelle mit der obigen Option Konvertieren aus, um die neue Spalte mit dem konvertierten Wert aus Ihrem Varchar-Feld zu aktualisieren.
  3. Löschen Sie dann die Spalte mit den Varchar-Daten.

Code für die oben beschriebenen Schritte

ALTER TABLE dbo.TableName ADD NewDateTimeCOL DATETIME

-- NOTE if your table is LARGE you will not want to do a direct update like this but do looping for performace purposes
UPDATE dbo.TableName
SET NewDateTimeCOL = convert(varchar, OldDateTimeCOL, 120)


ALTER TABLE dbo.TableName DROP COLUMN OldDateTimeCOL