Konwertowanie pola daty varchar na typ danych typu data i godzina [duplikat]

Dec 16 2020

Popełniłem błąd, używając varchar do przechowywania moich danych, które reprezentują datę / godzinę. Teraz próbuję przekonwertować moją kolumnę danych tekstowych, przechowywaną jako varchar, na przykład:

2020-11-25T14:22:41.3539327Z

Do kolumny, która przechowuje typ danych typu data-godzina.

Odpowiedzi

1 Larnu Dec 16 2020 at 02:49

Pod warunkiem, że wszystkie dane są w formacie yyyy-MM-ddThh:mm:ss.nnnnnnn, możesz po prostu zmienić typ danych w kolumnie:

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

Jeśli potrzebujesz tam strefy czasowej, użyj datetimeoffset(7)zamiast niej.

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

w zależności od tego, jakiej precyzji potrzebujesz, możesz użyć poniższego łącza, aby ją znaleźć i zmienić 120 na dowolną liczbę potrzebną do tej precyzji.

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

Aby naprawić tabelę, wykonaj następujące kroki:

  1. Dodaj nową kolumnę do tabeli dla DateTime
  2. Uruchom aktualizację tabeli, korzystając z powyższej opcji Konwertuj, aby zaktualizować nową kolumnę o przekonwertowaną wartość z pola varchar.
  3. Następnie upuść kolumnę z danymi varchar.

Kod do wykonania kroków opisanych powyżej

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