Allmän information
Dessa är standardformaten för datetimes-datatyper (vid konvertering från sträng)
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]
Obs! DT_DATE och DT_DBTIMESTAMP har samma SET-metod
Och jag tror att konvertering av sträng till datum också beror på din nuvarande kulturinformation
Mer detaljerad information finns här
- Datatyper för integrationstjänster
- ÖVERSÄTTNINGAR TILL SSIS TILL SQL SERVER DATATYP
Experiment :
Efter att ha läst din kommentar hittade jag ingen relaterad artikel till din fråga så jag gjorde följande experiment:
SSIS implicit datetime-konvertering
Jag skapade ett SSIS-paket med en Dataflowtask. i denna dataflödesuppgift skapade jag en skriptkomponent (som en källa) och en platt fildestination. Skriptet har en utdatakolumn OutDate
av typen DT_DbTimeStamp
Inuti skriptet använde jag följande kod:
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
Först slingrar jag över all kulturinformation och jag får alla datetime-format som är relaterade till det och slingrar över dem. Sedan försöker jag konvertera datumet dtDate
deklareras till en formaterad sträng och tilldela den till kolumnen Utdata.
Så om tilldelning av strängvärde med specificerat format till DT_DBTIMESTAMP utdatakolumn accepteras betyder det att formatet implicit konverteras
Output0Buffer.OutDate = dtDate.ToString(strFormat)
Och här är länken till resultatfilen:
- Result.txt
SQL Server datetime Implicit Conversion
Det finns två datetime-strängformat som tolkas korrekt med valfri språkinställning.
yyyyMMdd
yyyy-MM-ddTHH:mm:ss (ISO8601)
Du kan också upprepa samma experiment, men den här gången genom att skapa ett SqlCommand
och kör det:
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
sqlCmd.ExecuteReader()
På så sätt kan du om sqlcmd ger ett undantag betyder det att formatet inte kan konverteras.