Información general
Estos son los formatos predeterminados de los tipos de datos de fecha y hora (al convertir de cadena)
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 y DT_DBTIMESTAMP tienen el mismo método SET
Y creo que convertir la cadena a la fecha también depende de su información cultural actual
Puede encontrar información más detallada aquí
- Tipos de datos de servicios de integración
- TRADUCCIONES DE TIPOS DE DATOS DE SSIS A SQL SERVER
Experimentos:
Después de leer tu comentario, no encontré ningún artículo relacionado con tu pregunta, así que hice los siguientes experimentos:
Conversión de fecha y hora implícita de SSIS
Creé un paquete SSIS con Dataflowtask. en esta tarea de flujo de datos, creé un componente de secuencia de comandos (como fuente) y un destino de archivo plano. El script tiene una columna de salida OutDate
de tipo DT_DbTimeStamp
Dentro del script usé el siguiente 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
Primero estoy recorriendo toda la información cultural y estoy obteniendo todos los formatos de fecha y hora relacionados con él y recorriéndolos. Entonces estoy tratando de convertir la fecha dtDate
declarada a una cadena formateada y asígnela a la columna Salida.
Entonces, si se acepta la asignación de un valor de cadena con un formato específico a la columna de salida DT_DBTIMESTAMP, eso significa que el formato se convierte implícitamente
Output0Buffer.OutDate = dtDate.ToString(strFormat)
Y aquí está el enlace del archivo de resultados:
- Resultado.txt
Conversión implícita de fecha y hora de SQL Server
Hay dos formatos de cadena de fecha y hora que se interpretan correctamente con cualquier configuración de idioma.
yyyyMMdd
yyyy-MM-ddTHH:mm:ss (ISO8601)
Además, puede repetir el mismo experimento, pero esta vez creando un SqlCommand
y ejecutarlo:
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
sqlCmd.ExecuteReader()
De esa manera, si sqlcmd arroja una excepción, significa que el formato no se puede convertir.