Oracle
 sql >> Base de données >  >> RDS >> Oracle

Différence de conversion implicite du flux de données CAST vs ssis

À propos des numéros de série

La valeur stockée dans Oracle (42824 ) est connu sous le nom de série de date , il est également utilisé dans Microsoft Excel .

Date Serial représente le nombre de jours entre la valeur de la date et la valeur initiale qui est 1899-12-30

Vous pouvez en savoir plus sur les publications en série sur :

  • Pourquoi le 30/12/1899 est-il la date zéro dans Access/SQL Server au lieu du 31/12 ?
  • convertir le numéro de série de la date Excel en date normale

Méthode CAST

À partir de Microsoft Docs - CAST et CONVERT (Transact-SQL) :

Uniquement pris en charge lors de la conversion de données de caractères en datetime ou smalldatetime. Lorsque des données textuelles qui ne représentent que des composants de date ou uniquement d'heure sont converties en types de données datetime ou smalldatetime, le composant d'heure non spécifié est défini sur 00:00:00.000 et le composant de date non spécifié est défini sur 1900-01-01

Donc CAST fonction considère la valeur 1900-01-01 comme valeur initiale lors de la coulée des dates. Nous devons donc soustraire 2 jours lorsque nous l'utilisons pour convertir les séries de dates

Il existe 2 façons de le convertir à ce jour en utilisant SQL Server :

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

select CAST(36464 - 2 as SmallDateTime)

Conversion implicite SSIS

Toujours selon cet article de Microsoft docs

DBTYPE_DATE (Il s'agit d'un type DATE d'automatisation. Il est représenté en interne par un double. La partie entière est le nombre de jours depuis le 30 décembre 1899 et la partie fractionnaire est la fraction de jour. Ce type a une précision de 1 seconde , a donc une échelle effective de 0.)

Donc, la conversion implicite dans SSIS considère la valeur 1899-12-30 comme valeur initiale lors de la coulée des dates. Il n'est donc pas nécessaire de soustraire 2 jours lorsque vous l'utilisez pour convertir des séries de dates