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

SSIS Kildeformat Implicit Konvertering til Datetime

Generelle oplysninger

Disse er standardformaterne for datetime-datatyper (ved konvertering fra streng)

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]

Bemærk:DT_DATE og DT_DBTIMESTAMP har den samme SET-metode

Og jeg tror, ​​at konvertering af streng til dato også afhænger af din aktuelle kulturinformation

Mere detaljerede oplysninger findes her

  • Datatyper for integrationstjenester
  • OVERSÆTTELSE AF SSIS TIL SQL SERVER DATATYPE

Eksperimenter:

Efter at have læst din kommentar fandt jeg ingen relateret artikel til dit spørgsmål, så jeg lavede følgende eksperimenter:

SSIS Implicit dato-tidskonvertering

jeg oprettede en SSIS-pakke med en Dataflowtask. i denne dataflowopgave oprettede jeg en scriptkomponent (som en kilde) og en flad fildestination. Scriptet har én outputkolonne OutDate af typen DT_DbTimeStamp Inde i scriptet brugte jeg følgende kode:

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

Først gennemgår jeg al kulturinfo, og jeg får alle datetime-formater relateret til det og går over dem. Så prøver jeg at konvertere datoen dtDate erklæret til en formateret streng og tildel den til Output-kolonnen.

Så hvis tildeling af strengværdi med specificeret format til DT_DBTIMESTAMP outputkolonne accepteres, betyder det, at formatet er implicit konverteret

Output0Buffer.OutDate = dtDate.ToString(strFormat)

Og her er linket til resultatfilen:

  • Resultat.txt

SQL Server datetime Implicit Conversion

Der er to datetime-strengformater, der fortolkes korrekt med enhver sprogindstilling.

yyyyMMdd
yyyy-MM-ddTHH:mm:ss    (ISO8601)

Du kan også gentage det samme eksperiment, men denne gang ved at oprette en SqlCommand og udføre det:

Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"

sqlCmd.ExecuteReader()

På den måde kan du, hvis sqlcmd kaster en undtagelse, betyder, at formatet ikke kan konverteres.




  1. 4 måder at liste alle visninger i en SQL Server-database

  2. Funktioner vs lagrede procedurer

  3. Sådan beregnes det gennemsnitlige salg pr. dag i MySQL

  4. opdatering og komprimering af sqlite-database i Android