Chuyển đổi trường ngày varchar thành kiểu dữ liệu datetime [trùng lặp]
Tôi đã mắc lỗi khi sử dụng varchar để lưu trữ dữ liệu đại diện cho ngày / giờ của mình. Bây giờ tôi đang cố gắng chuyển đổi cột dữ liệu văn bản, được lưu trữ dưới dạng varchar, như sau:
2020-11-25T14:22:41.3539327Z
Vào một cột lưu trữ kiểu dữ liệu ngày giờ.
Trả lời
Với điều kiện tất cả dữ liệu của bạn ở định dạng yyyy-MM-ddThh:mm:ss.nnnnnnnthì bạn chỉ có thể thay đổi kiểu dữ liệu của cột:
ALTER TABLE dbo.YourTABLE ALTER COLUMN YourColumn datetime2(7);
Nếu bạn cần múi giờ trong đó, hãy sử dụng datetimeoffset(7)thay thế.
-- to fix it you can use convert, below uses GetDate for examaple
SELECT convert(varchar, getdate(), 120)
tùy thuộc vào độ chính xác bạn cần, bạn có thể sử dụng liên kết bên dưới để tìm và thay đổi 120 thành bất kỳ số nào bạn cần cho độ chính xác đó.
https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/
Để sửa bảng của bạn, bạn nên làm theo các bước sau:
- Thêm một cột mới vào bảng của bạn cho DateTime
- Chạy cập nhật trên bảng của bạn bằng cách sử dụng Chuyển đổi ở trên để cập nhật cột mới với giá trị được chuyển đổi từ trường varchar của bạn.
- Sau đó thả cột có dữ liệu varchar.
Mã để thực hiện các bước tôi đã nêu ở trên
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