Allgemeine Informationen
Dies sind die Standardformate von datetimes-Datentypen (beim Konvertieren von Strings)
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]
Hinweis:DT_DATE und DT_DBTIMESTAMP haben dieselbe SET-Methode
Und ich denke, dass das Konvertieren von Strings bis heute auch von Ihren aktuellen Kulturinformationen abhängt
Genauere Informationen finden Sie hier
- Integration Services-Datentypen
- SSIS-TO-SQL-SERVER-DATENTYPÜBERSETZUNG
Experimente :
Nachdem ich Ihren Kommentar gelesen habe, habe ich keinen verwandten Artikel zu Ihrer Frage gefunden, also habe ich die folgenden Experimente durchgeführt:
Implizite SSIS-Datum/Uhrzeit-Konvertierung
Ich habe ein SSIS-Paket mit einer Dataflowtask erstellt. In dieser Dataflowtask habe ich eine Skriptkomponente (als Quelle) und ein Flatfileziel erstellt. Das Skript hat eine Ausgabespalte OutDate
vom Typ DT_DbTimeStamp
Innerhalb des Skripts habe ich den folgenden Code verwendet:
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
Zuerst schleife ich alle Kulturinformationen durch und erhalte alle damit verbundenen Datetime-Formate und schleife sie durch. Dann versuche ich, das Datum dtDate
umzuwandeln als formatierte Zeichenfolge deklariert und der Ausgabespalte zugewiesen.
Wenn also die Zuweisung eines Zeichenfolgenwerts mit dem angegebenen Format zur Ausgabespalte DT_DBTIMESTAMP akzeptiert wird, bedeutet dies, dass das Format implizit konvertiert wird
Output0Buffer.OutDate = dtDate.ToString(strFormat)
Und hier ist der Link der Ergebnisdatei:
- Ergebnis.txt
SQL Server datetime implizite Konvertierung
Es gibt zwei Datetime-String-Formate, die mit jeder Spracheinstellung richtig interpretiert werden.
yyyyMMdd
yyyy-MM-ddTHH:mm:ss (ISO8601)
Sie können dasselbe Experiment auch wiederholen, aber dieses Mal, indem Sie einen SqlCommand
erstellen und ausführen:
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
sqlCmd.ExecuteReader()
Auf diese Weise können Sie, wenn sqlcmd eine Ausnahme auslöst, bedeutet, dass das Format nicht konvertiert werden kann.