Kontakt  Impressum 
 
       Navigationslinks überspringen.   

SSIS: Leeres Datum ersetzen

Es kommt immer wieder vor, dass externe Datenquellen leere Datumsfelder enthalten.
Leere Datumsfelder werden im SQL Server angezeigt als "1753-01-01 00:00:00.000".
Die Verwendung des Jahres 1753 stammt noch aus den allerersten Ursrüngen des SQL-Servers.
Weitere Informationen findet man auf der Seite von Frank Kalis: InsideSQL.org Der ultimative Guide für die Datetime Datentypen

Es stellt sich natürlich Frage, was macht man mit leeren Datumsfeldern in den SSIS?

Im ersten Schritt muss das leere Datum identifiziert werden.
Hierzu bietet sich die Ausdrucksprogrammierung an: 

DATEPART("yyyy",bdat) == DATEPART("yyyy",(DT_DBTIMESTAMP)"01.01.1753")

Dieser Ausdruck kann in einer Komponente "Bedingtes Teilen" dazu verwendet werden, den Datenfluss zu teilen. Die fehlerhaften Datensätze können so z.B. in eine Tabelle zur Nachbearbeitung geschrieben werden.

Soll das leere Datum aber durch ein Standarddatum ersetzt werden, kann man dies mit einer Komponente "Abgeleitete Spalte" sehr performant umsetzen:   

Im nachfolgenden Screenshot zeigt die Ersetzung eines leeres Datumsfeldes (bdat) mit dem Standarddatum "04.06.1990".
Ist das Datumsfeld nicht leer (Jahr <> 1753), dann wird die Ursprungsspalte verwendet:


Paketvariablen
Zum Kopieren hier nochmals der gesamte Ausdruck:

DATEPART("yyyy",bdat) == DATEPART("yyyy",(DT_DBTIMESTAMP)"01.01.1753") ? ((DT_DBTIMESTAMP)"04.06.1990") : bdat

Berthold Neumann
21. August. 2006