Giới thiệu về số tuần tự ngày
Giá trị được lưu trữ trong Oracle (42824
) được gọi là tuần tự ngày, nó cũng được sử dụng trong Microsoft Excel
.
Sê-ri ngày đại diện cho số Ngày giữa giá trị ngày và giá trị ban đầu là 1899-12-30
Bạn có thể đọc thêm về Số ngày tháng tại:
- Tại sao 1899-12-30 là ngày 0 trong Access / SQL Server thay vì 12/31?
- chuyển đổi Số sê-ri Ngày trong Excel thành Ngày Thông thường
Phương thức CAST
Từ Microsoft Docs - CAST và CONVERT (Transact-SQL):
Chỉ được hỗ trợ khi truyền từ dữ liệu ký tự sang datetime hoặc smalldatetime. Khi dữ liệu ký tự chỉ đại diện cho ngày hoặc chỉ các thành phần thời gian được truyền sang kiểu dữ liệu datetime hoặc smalldatetime, thành phần thời gian không xác định được đặt thành 00:00:00.000 và thành phần ngày không xác định được đặt thành 1900-01-01
Vì vậy, CAST
hàm xem xét giá trị 1900-01-01
như một giá trị ban đầu khi truyền ngày tháng. Vì vậy, chúng tôi cần trừ đi 2 ngày khi sử dụng nó để chuyển đổi Số ngày tháng
Có 2 cách để chuyển đổi nó thành ngày tháng bằng SQL Server:
select DATEADD(d,42824,'1899-12-30')
select CAST(36464 - 2 as SmallDateTime)
SSIS Chuyển đổi ngầm định
Cũng theo bài viết tài liệu này của Microsoft
DBTYPE_DATE (Đây là kiểu DATE tự động hóa. Nó được biểu thị bên trong dưới dạng kép .. Toàn bộ phần là số ngày kể từ ngày 30 tháng 12 năm 1899 và phần phân số là phần nhỏ của ngày. Loại này có độ chính xác là 1 giây , vì vậy có thang đo hiệu quả là 0.)
Vì vậy, chuyển đổi ngầm trong SSIS hãy xem xét giá trị 1899-12-30
như một giá trị ban đầu khi truyền ngày tháng. Vì vậy, không cần phải trừ đi 2 ngày khi sử dụng nó để chuyển đổi Số ngày tháng