sql >> Base de Datos >  >> RDS >> Oracle

Diferencia de conversión implícita de flujo de datos CAST vs ssis

Acerca de las publicaciones seriadas

El valor almacenado en Oracle (42824 ) se conoce como serial de fecha, también se usa en Microsoft Excel .

La serie de fecha representa el número de días entre el valor de la fecha y el valor inicial que es 1899-12-30

Puede obtener más información sobre las publicaciones seriadas en:

  • ¿Por qué 1899-12-30 es la fecha cero en Access/SQL Server en lugar del 31/12?
  • convertir número de serie de fecha de Excel a fecha normal

Método CAST

De Microsoft Docs - CAST y CONVERT (Transact-SQL):

Solo se admite cuando se envían datos de caracteres a datetime o smalldatetime. Cuando los datos de caracteres que representan solo la fecha o solo los componentes de hora se convierten en los tipos de datos datetime o smalldatetime, el componente de hora no especificado se establece en 00:00:00.000 y el componente de fecha no especificado se establece en 1900-01-01

Así que CAST la función considera el valor 1900-01-01 como valor inicial al momento de lanzar las fechas. Entonces, debemos restar 2 días cuando lo usamos para convertir seriales de fecha

Hay 2 formas de convertirlo a la fecha usando SQL Server:

select DATEADD(d,42824,'1899-12-30')

select CAST(36464 - 2 as SmallDateTime)

Conversión implícita de SSIS

También de acuerdo con este artículo de documentos de Microsoft

DBTYPE_DATE (Este es un tipo de FECHA de automatización. Se representa internamente como un doble. La parte entera es el número de días desde el 30 de diciembre de 1899 y la parte fraccionaria es la fracción de un día. Este tipo tiene una precisión de 1 segundo , por lo que tiene una escala efectiva de 0.)

Entonces, la conversión implícita en SSIS considera el valor 1899-12-30 como valor inicial al momento de lanzar las fechas. Por lo tanto, no hay necesidad de restar 2 días cuando se usa para convertir seriales de fecha