Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Conversione implicita del formato sorgente SSIS per Datetime

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.