Over datumseries
De waarde die is opgeslagen in Oracle (42824
) staat bekend als datumserie, het wordt ook gebruikt in Microsoft Excel
.
Datumserie vertegenwoordigt het aantal dagen tussen de datumwaarde en de beginwaarde die 1899-12-30
is
U kunt meer lezen over datumseries op:
- Waarom is 1899-12-30 de nuldatum in Access / SQL Server in plaats van 31-12?
- Converteer Excel Date Serienummer naar Normale Datum
CAST-methode
Van Microsoft Docs - CAST en CONVERT (Transact-SQL):
Alleen ondersteund bij het casten van karaktergegevens naar datetime of smalldatetime. Wanneer tekengegevens die alleen datum- of alleen tijdcomponenten vertegenwoordigen worden gecast naar de datatypes datetime of smalldatetime, wordt de niet-gespecificeerde tijdcomponent ingesteld op 00:00:00.000 en de niet-gespecificeerde datumcomponent wordt ingesteld op 1900-01-01
Dus CAST
functie houd rekening met de waarde 1900-01-01
als een initiële waarde bij het gieten van datums. Dus we moeten 2 dagen aftrekken wanneer we het gebruiken om datumseries te converteren
Er zijn 2 manieren om het tot op heden te converteren met SQL Server:
select DATEADD(d,42824,'1899-12-30')
select CAST(36464 - 2 as SmallDateTime)
SSIS Impliciete conversie
Ook volgens dit Microsoft docs-artikel
DBTYPE_DATE (Dit is een automatiseringstype DATE. Het wordt intern weergegeven als een dubbel.. Het hele deel is het aantal dagen sinds 30 december 1899 en het breukdeel is de fractie van een dag. Dit type heeft een nauwkeurigheid van 1 seconde , heeft dus een effectieve schaal van 0.)
Dus impliciete conversie in SSIS houdt rekening met de waarde 1899-12-30
als een initiële waarde bij het gieten van datums. Het is dus niet nodig om 2 dagen af te trekken wanneer u het gebruikt om datumseries te converteren