Sobre séries de data
O valor armazenado no Oracle (
42824
) é conhecido como data serial , também é usado no Microsoft Excel
. Data Serial representa o número de dias entre o valor da data e o valor inicial que é
1899-12-30
Você pode ler mais sobre Séries de datas em:
- Por que 1899-12-30 é a data zero no Access/SQL Server em vez de 31/12?
- converter o número de série da data do Excel para a data normal
Método CAST
Do Microsoft Docs - CAST e CONVERT (Transact-SQL):
Suportado apenas ao converter dados de caracteres para datetime ou smalldatetime. Quando dados de caracteres que representam apenas componentes de data ou apenas de hora são convertidos para os tipos de dados datetime ou smalldatetime, o componente de hora não especificado é definido como 00:00:00.000 e o componente de data não especificado é definido como 1900-01-01
Então
CAST
função considere o valor 1900-01-01
como um valor inicial ao lançar datas. Portanto, precisamos subtrair 2 dias ao usá-lo para converter seriais de data Existem 2 maneiras de convertê-lo em data usando o SQL Server:
select DATEADD(d,42824,'1899-12-30')
select CAST(36464 - 2 as SmallDateTime)
Conversão implícita SSIS
Também de acordo com este artigo de documentos da Microsoft
DBTYPE_DATE (Este é um tipo de automação DATE. É representado internamente como um duplo.. A parte inteira é o número de dias desde 30 de dezembro de 1899 e a parte fracionária é a fração de um dia. Este tipo tem uma precisão de 1 segundo , então tem uma escala efetiva de 0.)
Portanto, a conversão implícita no SSIS considere o valor
1899-12-30
como um valor inicial ao lançar datas. Portanto, não há necessidade de subtrair 2 dias ao usá-lo para converter seriais de data