sql >> Base de Datos >  >> RDS >> Sqlserver

Conversión implícita de formato de origen de SSIS para fecha y hora

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.