Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Conversion implicite du format source SSIS pour la date et l'heure

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.