Konwertowanie pola daty varchar na typ danych typu data i godzina [duplikat]
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
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.
-- 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:
- Dodaj nową kolumnę do tabeli dla DateTime
- Uruchom aktualizację tabeli, korzystając z powyższej opcji Konwertuj, aby zaktualizować nową kolumnę o przekonwertowaną wartość z pola varchar.
- 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