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

CAST vs ssis dataflow implicit konverteringsforskel

Om datoserier

Værdien gemt i Oracle (42824 ) er kendt som datoserie , den bruges også i Microsoft Excel .

Datoserie repræsenterer antallet af dage mellem datoværdien og startværdien, der er 1899-12-30

Du kan læse mere om datoserier på:

  • Hvorfor er 1899-12-30 nuldatoen i Access / SQL Server i stedet for 12/31?
  • konverter Excel-dato-serienummer til almindelig dato

CAST-metode

Fra Microsoft Docs - CAST og CONVERT (Transact-SQL):

Kun understøttet ved casting fra karakterdata til datetime eller smalldatetime. Når tegndata, der kun repræsenterer dato eller kun tidskomponenter, castes til datatyperne datetime eller smalldatetime, sættes den uspecificerede tidskomponent til 00:00:00.000, og den uspecificerede datokomponent indstilles til 1900-01-01

CAST funktion overveje værdien 1900-01-01 som startværdi ved casting af datoer. Så vi skal trække 2 dage fra, når vi bruger det til at konvertere datoserier

Der er 2 måder at konvertere det til dato ved hjælp af SQL Server:

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

select CAST(36464 - 2 as SmallDateTime)

SSIS Implicit konvertering

Også ifølge denne Microsoft docs-artikel

DBTYPE_DATE (Dette er en automatisering DATE-type. Den er internt repræsenteret som en dobbelt.. Hele delen er antallet af dage siden 30. december 1899, og brøkdelen er brøkdelen af ​​en dag. Denne type har en nøjagtighed på 1 sekund , så har en effektiv skala på 0.)

Så implicit konvertering i SSIS overvej værdien 1899-12-30 som startværdi ved casting af datoer. Så der er ingen grund til at trække 2 dage fra, når du bruger det til at konvertere datoserier




  1. Sådan tilføjes total række i MySQL

  2. Importer CSV-fil til SQL Server

  3. SQL datoformat

  4. Mere om introduktion af tidszoner i langlivede projekt