Generelle oplysninger
Disse er standardformaterne for datetime-datatyper (ved konvertering fra streng)
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]
Bemærk:DT_DATE og DT_DBTIMESTAMP har den samme SET-metode
Og jeg tror, at konvertering af streng til dato også afhænger af din aktuelle kulturinformation
Mere detaljerede oplysninger findes her
- Datatyper for integrationstjenester
- OVERSÆTTELSE AF SSIS TIL SQL SERVER DATATYPE
Eksperimenter:
Efter at have læst din kommentar fandt jeg ingen relateret artikel til dit spørgsmål, så jeg lavede følgende eksperimenter:
SSIS Implicit dato-tidskonvertering
jeg oprettede en SSIS-pakke med en Dataflowtask. i denne dataflowopgave oprettede jeg en scriptkomponent (som en kilde) og en flad fildestination. Scriptet har én outputkolonne OutDate
af typen DT_DbTimeStamp
Inde i scriptet brugte jeg følgende kode:
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 gennemgår jeg al kulturinfo, og jeg får alle datetime-formater relateret til det og går over dem. Så prøver jeg at konvertere datoen dtDate
erklæret til en formateret streng og tildel den til Output-kolonnen.
Så hvis tildeling af strengværdi med specificeret format til DT_DBTIMESTAMP outputkolonne accepteres, betyder det, at formatet er implicit konverteret
Output0Buffer.OutDate = dtDate.ToString(strFormat)
Og her er linket til resultatfilen:
- Resultat.txt
SQL Server datetime Implicit Conversion
Der er to datetime-strengformater, der fortolkes korrekt med enhver sprogindstilling.
yyyyMMdd
yyyy-MM-ddTHH:mm:ss (ISO8601)
Du kan også gentage det samme eksperiment, men denne gang ved at oprette en SqlCommand
og udføre det:
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
sqlCmd.ExecuteReader()
På den måde kan du, hvis sqlcmd kaster en undtagelse, betyder, at formatet ikke kan konverteres.