sql >> Databasteknik >  >> RDS >> Oracle

CAST vs ssis dataflöde implicit konverteringsskillnad

Om datumserier

Värdet lagrat i Oracle (42824 ) är känt som datumserie, det används också i Microsoft Excel .

Datumserie representerar antalet dagar mellan datumvärdet och startvärdet som är 1899-12-30

Du kan läsa mer om datumserier på:

  • Varför är 1899-12-30 nolldatumet i Access/SQL Server istället för 12/31?
  • konvertera Excel-datumserienummer till vanligt datum

CAST-metoden

Från Microsoft Docs - CAST och CONVERT (Transact-SQL):

Stöds endast när du castar från karaktärsdata till datetime eller smalldatetime. När teckendata som endast representerar datum eller endast tidskomponenter castas till datatyperna datetime eller smalldatetime, ställs den ospecificerade tidskomponenten in på 00:00:00.000 och den ospecificerade datumkomponenten ställs in på 1900-01-01

Alltså CAST funktionen beakta värdet 1900-01-01 som ett initialt värde vid gjutning av datum. Så vi måste subtrahera 2 dagar när vi använder det för att konvertera datumserier

Det finns två sätt att konvertera det till datum med SQL Server:

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

select CAST(36464 - 2 as SmallDateTime)

SSIS implicit konvertering

Även enligt denna Microsoft docs-artikel

DBTYPE_DATE (Detta är en automatiserad DATE-typ. Den representeras internt som en dubbel. Hela delen är antalet dagar sedan 30 december 1899 och bråkdelen är bråkdelen av en dag. Denna typ har en noggrannhet på 1 sekund , så har en effektiv skala på 0.)

Så implicit konvertering i SSIS överväg värdet 1899-12-30 som ett initialt värde vid gjutning av datum. Så det finns ingen anledning att subtrahera 2 dagar när du använder den för att konvertera datumserier




  1. Hur man övervakar HAProxy Metrics med ClusterControl

  2. Att skriva en fil med flera trådar

  3. Steg för steg uppgraderingsprocess till R12.2 Uppgradering del -3

  4. Om kommandot GO i SQL Server