Informazioni generali
Questi sono i formati predefiniti dei tipi di dati datetimes (durante la conversione da stringa)
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]
Nota:DT_DATE e DT_DBTIMESTAMP hanno lo stesso metodo SET
E penso che la conversione di stringhe in date dipenda anche dalle tue attuali informazioni sulla cultura
Informazioni più dettagliate sono disponibili qui
- Tipi di dati dei servizi di integrazione
- TRADUZIONI DEL TIPO DI DATI DA SSIS A SQL SERVER
Esperimenti :
Dopo aver letto il tuo commento non ho trovato alcun articolo correlato alla tua domanda, quindi ho fatto i seguenti esperimenti:
Conversione data/ora implicita SSIS
ho creato un pacchetto SSIS con un Dataflowtask. in questo dataflowtask ho creato un componente script (come origine) e una destinazione file flat. Lo script ha una colonna di output OutDate
di tipo DT_DbTimeStamp
All'interno dello script ho utilizzato il seguente codice:
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
Per prima cosa sto scorrendo tutte le informazioni sulla cultura e sto ottenendo tutti i formati datetime relativi ad esso e scorrendoli su di essi. Quindi sto cercando di convertire la data dtDate
dichiarata in una stringa formattata e assegnarla alla colonna Output.
Quindi, se viene accettata l'assegnazione di un valore stringa con il formato specificato alla colonna di output DT_DBTIMESTAMP, significa che il formato è convertito in modo implicito
Output0Buffer.OutDate = dtDate.ToString(strFormat)
Ed ecco il link del file dei risultati:
- Risultato.txt
Conversione implicita data/ora di SQL Server
Esistono due formati di stringhe datetime che vengono interpretati correttamente con qualsiasi impostazione della lingua.
yyyyMMdd
yyyy-MM-ddTHH:mm:ss (ISO8601)
Inoltre, puoi ripetere lo stesso esperimento, ma questa volta creando un SqlCommand
ed eseguirlo:
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
sqlCmd.ExecuteReader()
In questo modo puoi se sqlcmd genera un'eccezione significa che il formato non può essere convertito.