Tôi đang cố gắng nhập một số dữ liệu từ CSV vào Máy chủ MS SQL 2008. Tôi đang sử dụng Invoke-SQL của PowerShell và tập lệnh SQL sử dụng BULK INSERT
.
Các trường CSV được nhập dưới dạng VarChars và tôi đang cố gắng chỉ định kiểu dữ liệu.
Trong dữ liệu được cung cấp trong CSV (mà tôi không thể kiểm soát), một số trường datetime có ngày / giờ theo định dạng này:
2012-03-15 15:10:08.920000000
Thông thường tôi chỉ sử dụng ALTER và để SQL chuyển đổi nó, và thường thì nó hoạt động ... ví dụ:
ALTER TABLE [dbo].[ImportData] ALTER COLUMN [PlanSetupDate] datetime null;
nhưng, khi nó chạm vào một trong các DateTimes như trên, nó không thành công với thông báo lỗi:
Chuyển đổi không thành công khi chuyển đổi ngày và / hoặc thời gian từ chuỗi ký tự.
Tiếp theo, tôi đã thử Chuyển đổi của SQL:
Select Convert(datetime, '2012-03-15 15:10:08.920000000')
Nhưng tôi nhận được thông báo lỗi tương tự như khi sử dụng ALTER.
Nếu tôi cắt bỏ các vị trí thập phân thêm (để lại ba hoặc ít hơn), chuyển đổi hoạt động như mong đợi, ví dụ:
2012-03-15 15:10:08.920
Tôi không thể chỉ cắt ngắn các nhân vật X mới nhất từ lĩnh vực này trước khi chuyển đổi, bởi vì hầu hết các của datetime khác trong cột là định dạng truyền thống hơn như 2010-01-05 00:00:00
.
Trong khi tôi muốn giữ nó, phần thời gian thực sự không quan trọng lắm, chắc chắn không có gì sau số thập phân. Vì vậy, nếu giải pháp chuyển đổi nó đòi hỏi phải cắt nó ở mức thập phân, thì tốt thôi. :)
Tôi luôn có thể sửa đổi CSV trước khi nhập nó vào SQL thông qua PowerShell hoặc tương tự, nhưng tôi muốn thực hiện tất cả việc xử lý dữ liệu của mình trong SQL, nếu có thể.
Vì vậy, có cách nào để chuyển đổi định dạng datetime có vấn đề này bằng truy vấn SQL không?
datetime2
thay vì datetime
? Datetime chỉ giữ 3 chữ số trong vài giây qua, datetime2 giữ tối đa 7 chữ số.