Algemene informatie
Dit zijn de standaard formaten van datetimes datatypes (bij het converteren van string)
DT_DBDATE
yyyy-mm-dd
DT_FILETIME
yyyy-mm-dd hh:mm:ss:fff
DT_DBTIME
hh:mm:ss
DT_DBTIME2
hh:mm:ss[.fffffff]
DT_DBTIMESTAMP
yyyy-mm-dd hh:mm:ss[.fff]
DT_DBTIMESTAMP2
yyyy-mm-dd hh:mm:ss[.fffffff]
DT_DBTIMESTAMPOFFSET
yyyy-mm-dd hh:mm:ss[.fffffff] [{+|-} hh:mm]
Opmerking:DT_DATE en DT_DBTIMESTAMP hebben dezelfde SET-methode
En ik denk dat het converteren van string tot nu toe ook afhangt van je huidige cultuurinfo
Meer gedetailleerde informatie vindt u hier
- Integratieservices-gegevenstypen
- SSIS NAAR SQL SERVER DATA TYPE VERTALINGEN
Experimenten:
Na het lezen van uw opmerking vond ik geen gerelateerd artikel aan uw vraag, dus deed ik de volgende experimenten:
SSIS Impliciete datetime-conversie
ik heb een SSIS-pakket gemaakt met een Dataflowtask. in deze dataflowtask heb ik een Script Component (als Bron) en een Flat File Destination gemaakt. Het script heeft één uitvoerkolom OutDate
van het type DT_DbTimeStamp
In het script heb ik de volgende code gebruikt:
Private dtDate As Date = #01/01/2016#
Public Overrides Sub CreateNewOutputRows()
Output0Buffer.AddRow()
Using sw As New IO.StreamWriter("D:\Result.txt", False)
sw.WriteLine("CultureInfo;Date;Format;Accepted")
sw.Close()
End Using
For Each ci As System.Globalization.CultureInfo In System.Globalization.CultureInfo.GetCultures(Globalization.CultureTypes.AllCultures)
For Each strFormat As String In ci.DateTimeFormat.GetAllDateTimePatterns
Dim boolResult As Boolean = True
Try
Output0Buffer.OutDate = dtDate.ToString(strFormat)
boolResult = True
Catch ex As Exception
boolResult = False
End Try
Using sw As New IO.StreamWriter("D:\Result.txt", True)
sw.WriteLine(ci.Name & ";" & dtDate.ToString(strFormat) & ";" & strFormat & ";" & boolResult.ToString)
sw.Close()
End Using
Next
Next
End Sub
Eerst loop ik alle cultuurinformatie door en krijg ik alle datetime-indelingen die ermee verband houden en loop ik eroverheen. Dan probeer ik de datum dtDate
te converteren gedeclareerd naar een geformatteerde tekenreeks en wijs deze toe aan de kolom Uitvoer.
Dus als het toewijzen van een tekenreekswaarde met een gespecificeerd formaat aan de DT_DBTIMESTAMP-uitvoerkolom wordt geaccepteerd, betekent dit dat het formaat impliciet is geconverteerd
Output0Buffer.OutDate = dtDate.ToString(strFormat)
En hier is de link van het resultaatbestand:
- Result.txt
SQL Server datetime impliciete conversie
Er zijn twee datum- en tijdreeksindelingen die correct worden geïnterpreteerd met elke taalinstelling.
yyyyMMdd
yyyy-MM-ddTHH:mm:ss (ISO8601)
U kunt hetzelfde experiment herhalen, maar deze keer door een SqlCommand
. te maken en uitvoeren:
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
sqlCmd.ExecuteReader()
Op die manier kun je ervoor zorgen dat als sqlcmd een uitzondering genereert, dit betekent dat het formaat niet kan worden geconverteerd.