Oracle
 sql >> Database >  >> RDS >> Oracle

Differenza di conversione implicita del flusso di dati CAST vs ssis

Informazioni sui seriali di data

Il valore archiviato in Oracle (42824 ) è noto come data seriale , è utilizzato anche in Microsoft Excel .

Data Seriale rappresenta il numero di giorni tra il valore della data e il valore iniziale che è 1899-12-30

Puoi leggere ulteriori informazioni sui numeri di serie su:

  • Perché il 30/12/1899 è la data zero in Access/SQL Server invece del 31/12?
  • convertire il numero di serie della data di Excel in data normale

Metodo CAST

Da Microsoft Docs - CAST e CONVERT (Transact-SQL):

Supportato solo durante il casting dai dati del personaggio a datetime o smalldatetime. Quando viene eseguito il cast di dati carattere che rappresentano solo componenti di data o solo ora ai tipi di dati datetime o smalldatetime, il componente dell'ora non specificato viene impostato su 00:00:00.000 e il componente della data non specificato è impostato su 01-01-1900

Quindi CAST funzione considera il valore 1900-01-01 come valore iniziale durante il casting delle date. Quindi dobbiamo sottrarre 2 giorni quando lo utilizziamo per convertire i numeri di serie della data

Esistono 2 modi per convertirlo fino ad oggi utilizzando SQL Server:

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

select CAST(36464 - 2 as SmallDateTime)

Conversione implicita SSIS

Anche secondo questo articolo di Microsoft Docs

DBTYPE_DATE (Questo è un tipo DATE di automazione. È rappresentato internamente come double.. La parte intera è il numero di giorni trascorsi dal 30 dicembre 1899 e la parte frazionaria è la frazione di giorno. Questo tipo ha una precisione di 1 secondo , quindi ha una scala effettiva di 0.)

Quindi la conversione implicita in SSIS considera il valore 1899-12-30 come valore iniziale durante il casting delle date. Quindi non è necessario sottrarre 2 giorni quando lo si utilizza per convertire i numeri di serie della data