Oracle
 sql >> Datenbank >  >> RDS >> Oracle

CAST vs. ssis-Datenfluss impliziter Konvertierungsunterschied

Über Datumsserien

Der in Oracle gespeicherte Wert (42824 ) ist bekannt als date serial , es wird auch in Microsoft Excel verwendet .

Date Serial stellt die Anzahl der Tage zwischen dem Datumswert und dem Anfangswert dar, der 1899-12-30 ist

Weitere Informationen zu Datumsserien finden Sie unter:

  • Warum ist 1899-12-30 das Nulldatum in Access / SQL Server und nicht der 31.12?
  • Excel-Datumsseriennummer in reguläres Datum umwandeln

CAST-Methode

Aus Microsoft Docs – CAST und CONVERT (Transact-SQL):

Wird nur beim Casting von Zeichendaten in datetime oder smalldatetime unterstützt. Wenn Zeichendaten, die nur Datums- oder nur Zeitkomponenten darstellen, in die Datentypen datetime oder smalldatetime umgewandelt werden, wird die nicht angegebene Zeitkomponente auf 00:00:00.000 und die nicht angegebene Datumskomponente auf 1900-01-01

Also CAST Funktion berücksichtigt den Wert 1900-01-01 als Anfangswert beim Gießen von Daten. Wir müssen also 2 Tage abziehen, wenn wir es verwenden, um Datumsserien umzuwandeln

Es gibt zwei Möglichkeiten, es mit SQL Server in das Datum zu konvertieren:

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

select CAST(36464 - 2 as SmallDateTime)

Implizite SSIS-Konvertierung

Auch gemäß diesem Artikel in der Microsoft-Dokumentation

DBTYPE_DATE (Dies ist ein automatisierter DATE-Typ. Er wird intern als Double dargestellt. Der ganze Teil ist die Anzahl der Tage seit dem 30. Dezember 1899 und der Bruchteil ist der Bruchteil eines Tages. Dieser Typ hat eine Genauigkeit von 1 Sekunde , hat also eine effektive Skala von 0.)

Daher berücksichtigt die implizite Konvertierung in SSIS den Wert 1899-12-30 als Anfangswert beim Gießen von Daten. Es ist also nicht erforderlich, 2 Tage abzuziehen, wenn Sie es zum Konvertieren von Datumsserien verwenden