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.