Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Conversão implícita do formato de origem SSIS para data e hora

Informações gerais


Estes são os formatos padrão de tipos de dados datetimes (ao converter de string)
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]

Observação:DT_DATE e DT_DBTIMESTAMP têm o mesmo método SET

E eu acho que a conversão de string para data depende também de suas informações de cultura atuais

Informações mais detalhadas são encontradas aqui
  • Tipos de dados de serviços de integração
  • TRADUÇÕES DE TIPO DE DADOS SSIS PARA SQL SERVER

Experiências:


Depois de ler seu comentário, não encontrei nenhum artigo relacionado à sua pergunta, então fiz os seguintes experimentos:

Conversão implícita de data e hora do SSIS

eu criei um pacote SSIS com um Dataflowtask. nesta tarefa de fluxo de dados criei um Script Component (como Source) e um Flat File Destination. O script tem uma coluna de saída OutDate do tipo DT_DbTimeStamp Dentro do script usei o seguinte código:
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

Primeiro, estou fazendo um loop sobre todas as informações de cultura e estou obtendo todos os formatos de data e hora relacionados a eles e fazendo um loop sobre eles. Então estou tentando converter a data dtDate declarado para uma string formatada e atribua-a à coluna Output.

Portanto, se a atribuição do valor da string com o formato especificado à coluna de saída DT_DBTIMESTAMP for aceita, isso significa que o formato é convertido implícito
Output0Buffer.OutDate = dtDate.ToString(strFormat)

E aqui está o link do arquivo de resultado:
  • Result.txt

Conversão implícita de data e hora do SQL Server

Existem dois formatos de string de data e hora que são interpretados corretamente com qualquer configuração de idioma.
yyyyMMdd
yyyy-MM-ddTHH:mm:ss    (ISO8601)

Além disso, você pode repetir o mesmo experimento, mas desta vez criando um SqlCommand e executando:
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"

sqlCmd.ExecuteReader()

Dessa forma, você pode, se o sqlcmd lançar uma exceção, significa que o formato não pode ser convertido.