Announcement

Collapse
No announcement yet.

Ganz einfache SSIS-Aufgabe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ganz einfache SSIS-Aufgabe

    Hallo,

    ich möchte mit SSIS (SQL Server Integration Service) eine Datumsspalte in meine SQL-Server DB einlesen. Scheinbar einfach, hält mich aber jetzt schon 2 Tage auf. In der Spalte steht ein Datum als String mit folgendem Aufbau:

    "TTMMJJJJ"

    Die Spalte im SQL-Server (2008R) ist vom Typ Date. So bin ich vorgegangen:

    Derived Column Operator der den String in einen anderen String mit dem Format "JJJJ-MM-TT 00:00:00.000" überführt.

    Code:
    RIGHT(DateOfBirth,4) + "-" + SUBSTRING(DateOfBirth,3,2) + "-" + REPLICATE("0",8 - LEN(DateOfBirth)) + SUBSTRING(DateOfBirth,1,LEN(DateOfBirth) - 6) + " 00:00:00.000"
    Danach habe ich einen Data Conversion Operator angehängt, der den String in ein [DT_DBDate] umwandeln soll. Leider gibt er der den folgenden Fehler zurück:

    Code:
    Error: 0xC020901C at Data Flow Task, SQL Server [333]: There was an error with input column "DateOfBirth" (376) on input "OLE DB Destination Input" (346). The column status returned was: "The value could not be converted because of a potential loss of data.".
    Dabei ist es egal, ob ich die Stunden, Minuten etc. weglasse oder nicht. Warum ist das so?

    Gruß
    bgeissl

  • #2
    Ich habe den Fehler gefunden. Die Formel war falsch. Richtig ist...

    Code:
    RIGHT(DateOfBirth,4) + "-" + REVERSE(SUBSTRING(REVERSE(DateOfBirth),5,2)) + "-" + REPLICATE("0",8 - LEN(DateOfBirth)) + SUBSTRING(DateOfBirth,1,LEN(DateOfBirth) - 6) + " 00:00:00.000"
    Die Besonderheit an den eingehenden Datumswerten ist, dass es nicht nur das Format "TTMMJJJJ" gibt, sondern auch "TMMJJJJ" (z. B. der 1. Mai 2000 ist nicht 01052000 sondern 1052000). Deshalb ist auch die Formel so umständlich.

    Comment


    • #3
      Originally posted by bgeissl View Post
      Ich habe den Fehler gefunden. Die Formel war falsch. Richtig ist...

      Code:
      RIGHT(DateOfBirth,4) + "-" + REVERSE(SUBSTRING(REVERSE(DateOfBirth),5,2)) + "-" + REPLICATE("0",8 - LEN(DateOfBirth)) + SUBSTRING(DateOfBirth,1,LEN(DateOfBirth) - 6) + " 00:00:00.000"
      Die Besonderheit an den eingehenden Datumswerten ist, dass es nicht nur das Format "TTMMJJJJ" gibt, sondern auch "TMMJJJJ" (z. B. der 1. Mai 2000 ist nicht 01052000 sondern 1052000). Deshalb ist auch die Formel so umständlich.
      Mmh, ist das die einzige "Besonderheit". Vielleicht gibt es ja auch "TTMJJJJ".
      Was wäre '2121988' dann für ein Datum?
      M.E. ist sowas nur zu vertreten, wenn man sich 500% absichert, dass die Eingangswerte tatsächlich immer Deiner Darstellung entsprechen und nicht bloß auf Basis von Testdaten basieren.

      Wenn ein bisschen Grundrauschen nicht stört, kann es natürlich egal sein...
      Gruß, defo

      Comment


      • #4
        Hi Defo,

        nee, den anderen Fall ("TTMJJJJ") gab es nicht. Den hier ("TMMJJJJ") gabs, weil das ursprünglich mal CSV-Dateien waren bei denen Excel die führende 0 gelöscht hat. Es liefen jetzt auch rund 3 Mio Datensätze ohne Fehler durch. Das wird dann wohl jetzt stimmen. Trotzdem Danke.

        Gruß
        bgeissl

        Comment

        Working...
        X