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:
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