sql >> Database >  >> RDS >> Sqlserver

SSIS Bronformaat Impliciete conversie voor Datetime

Algemene informatie

Dit zijn de standaard formaten van datetimes datatypes (bij het converteren van 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]

Opmerking:DT_DATE en DT_DBTIMESTAMP hebben dezelfde SET-methode

En ik denk dat het converteren van string tot nu toe ook afhangt van je huidige cultuurinfo

Meer gedetailleerde informatie vindt u hier

  • Integratieservices-gegevenstypen
  • SSIS NAAR SQL SERVER DATA TYPE VERTALINGEN

Experimenten:

Na het lezen van uw opmerking vond ik geen gerelateerd artikel aan uw vraag, dus deed ik de volgende experimenten:

SSIS Impliciete datetime-conversie

ik heb een SSIS-pakket gemaakt met een Dataflowtask. in deze dataflowtask heb ik een Script Component (als Bron) en een Flat File Destination gemaakt. Het script heeft één uitvoerkolom OutDate van het type DT_DbTimeStamp In het script heb ik de volgende code gebruikt:

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

Eerst loop ik alle cultuurinformatie door en krijg ik alle datetime-indelingen die ermee verband houden en loop ik eroverheen. Dan probeer ik de datum dtDate te converteren gedeclareerd naar een geformatteerde tekenreeks en wijs deze toe aan de kolom Uitvoer.

Dus als het toewijzen van een tekenreekswaarde met een gespecificeerd formaat aan de DT_DBTIMESTAMP-uitvoerkolom wordt geaccepteerd, betekent dit dat het formaat impliciet is geconverteerd

Output0Buffer.OutDate = dtDate.ToString(strFormat)

En hier is de link van het resultaatbestand:

  • Result.txt

SQL Server datetime impliciete conversie

Er zijn twee datum- en tijdreeksindelingen die correct worden geïnterpreteerd met elke taalinstelling.

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

U kunt hetzelfde experiment herhalen, maar deze keer door een SqlCommand . te maken en uitvoeren:

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

sqlCmd.ExecuteReader()

Op die manier kun je ervoor zorgen dat als sqlcmd een uitzondering genereert, dit betekent dat het formaat niet kan worden geconverteerd.




  1. Zoeken naar tekst in Oracle Stored Procedures

  2. Verbindingsverwerking en -beperking met ProxySQL

  3. Veroorzaakt door:android.database.sqlite.SQLiteException:geen dergelijke tabel:BOOK (code 1 SQLITE_ERROR)

  4. psycopg2 lekt geheugen na grote zoekopdracht