Informations générales
Ce sont les formats par défaut des types de données datetimes (lors de la conversion à partir d'une chaîne)
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]
Remarque :DT_DATE et DT_DBTIMESTAMP ont la même méthode SET
Et je pense que la conversion de la chaîne en date dépend également de vos informations culturelles actuelles
Des informations plus détaillées sont disponibles ici
- Types de données des services d'intégration
- TRADUCTIONS DE TYPES DE DONNÉES SSIS VERS SQL SERVER
Expériences :
Après avoir lu votre commentaire, je n'ai trouvé aucun article lié à votre question, j'ai donc fait les expériences suivantes :
Conversion datetime implicite SSIS
J'ai créé un package SSIS avec une Dataflowtask. dans cette tâche de flux de données, j'ai créé un composant de script (en tant que source) et une destination de fichier plat. Le script a une colonne de sortie OutDate
de type DT_DbTimeStamp
Dans le script, j'ai utilisé le code suivant :
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
Tout d'abord, je boucle toutes les informations sur la culture et j'obtiens tous les formats de date et d'heure qui s'y rapportent et je les boucle. Ensuite, j'essaie de convertir la date dtDate
déclarée dans une chaîne formatée et affectez-la à la colonne Sortie.
Donc, si l'attribution d'une valeur de chaîne avec le format spécifié à la colonne de sortie DT_DBTIMESTAMP est acceptée, cela signifie que le format est implicitement converti
Output0Buffer.OutDate = dtDate.ToString(strFormat)
Et Voici le Lien du Fichier Résultat :
- Result.txt
Conversion implicite datetime SQL Server
Il existe deux formats de chaîne datetime qui sont interprétés correctement avec n'importe quel paramètre de langue.
yyyyMMdd
yyyy-MM-ddTHH:mm:ss (ISO8601)
Aussi, vous pouvez répéter la même expérience Mais cette fois en créant un SqlCommand
et l'exécuter :
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
sqlCmd.ExecuteReader()
De cette façon, si sqlcmd lève une exception, cela signifie que le format ne peut pas être converti.