Om datumserier
Värdet lagrat i Oracle (42824
) är känt som datumserie, det används också i Microsoft Excel
.
Datumserie representerar antalet dagar mellan datumvärdet och startvärdet som är 1899-12-30
Du kan läsa mer om datumserier på:
- Varför är 1899-12-30 nolldatumet i Access/SQL Server istället för 12/31?
- konvertera Excel-datumserienummer till vanligt datum
CAST-metoden
Från Microsoft Docs - CAST och CONVERT (Transact-SQL):
Stöds endast när du castar från karaktärsdata till datetime eller smalldatetime. När teckendata som endast representerar datum eller endast tidskomponenter castas till datatyperna datetime eller smalldatetime, ställs den ospecificerade tidskomponenten in på 00:00:00.000 och den ospecificerade datumkomponenten ställs in på 1900-01-01
Alltså CAST
funktionen beakta värdet 1900-01-01
som ett initialt värde vid gjutning av datum. Så vi måste subtrahera 2 dagar när vi använder det för att konvertera datumserier
Det finns två sätt att konvertera det till datum med SQL Server:
select DATEADD(d,42824,'1899-12-30')
select CAST(36464 - 2 as SmallDateTime)
SSIS implicit konvertering
Även enligt denna Microsoft docs-artikel
DBTYPE_DATE (Detta är en automatiserad DATE-typ. Den representeras internt som en dubbel. Hela delen är antalet dagar sedan 30 december 1899 och bråkdelen är bråkdelen av en dag. Denna typ har en noggrannhet på 1 sekund , så har en effektiv skala på 0.)
Så implicit konvertering i SSIS överväg värdet 1899-12-30
som ett initialt värde vid gjutning av datum. Så det finns ingen anledning att subtrahera 2 dagar när du använder den för att konvertera datumserier