Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Diferença de conversão implícita do fluxo de dados CAST vs ssis

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