Safe casting VARCHAR in DECIMAL in Teradata
In Teradata-DB habe ich Quelltabelle
create set table SRC_TABLE (
Some_Id varchar(2O) not null
);
Diese Tabelle wurde mit Daten aus einem externen system. Ich habe Zieltabelle
create set table DST_TABLE (
Some_Id decimal(4,0) not null
);
Brauche ich zum kopieren von Zeilen aus SRC_TABLE zu DST_TABLE sicher. Es ist ein Vertrag in Kraft, externes system nur Werte konvertierbar DECIMAL(4). Allerdings gibt es eine sichere Art und Weise, wie, um Zeilen auszuwählen, die in SRC_TABLE, die nicht konform mit Vertrag und verursachen typecasting Fehler?
Update: ich kann die UDF-Funktionen aufgrund von Einschränkungen in der Umgebung arbeite ich in.
- verwenden trycast() stackoverflow.com/questions/39386736/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie schreiben, die Daten aus der alten Tabelle mit FastExport zu laden und dann in die neue Tabelle mit FastLoad. Alle Einträge, die parse decimal(4, 0) werden geladen, um die neue Tabelle, während der rest wird geschrieben, um Fehler-Tabellen. Stellen Sie sicher, dass eine ausreichend hohe
ERRLIMIT
um sicherzustellen, dass der job nicht sterben, nachdem eine Handvoll Fehler.Ich würde vorschlagen, mit der
MERGE INTO
- operation in SQL mit der Fehler-Tabellen zu erfassen, die Datensätze, die nicht angewendet werden konnte. Dies ermöglicht es Ihnen, die Daten zu laden und post-Prozess die Einträge in der Fehler-Tabellen, die nicht angewendet werden konnte.Könnten Sie auch downloaden Sie die entsprechende UDF-Bibliotheken von der Teradata Developer Exchange und verwenden Sie die
IsNumeric()
äquivalent zum ausführen eines bedingten überprüfen in jeder Zeile derSRC_TABLE
zu vermeiden, einfügen von nicht-numerischen Daten in der Tabelle. Diese bedingte überprüfen konnten, entsorgen Sie den gesamten Datensatz laden Datensatz in eine log-Tabelle, oder setzen Sie den Wert auf eine vereinbarte default-Wert für ungültige Daten.Schließlich mit Hilfe meiner Kollegen kam ich zu Machbaren Lösung. Es hat einige Einschränkungen (Vorzeichen wird nicht berücksichtigt, Dezimalstellen nicht berücksichtigt), aber für die IDs funktioniert es Prima.
Also die Aufzeichnungen von
SRC_TABLE
die nicht konvertiert werden, umDECIMAL(4)
können erhalten werden, indem man wählen:BEARBEITEN:
Bequemer ist die Art und Weise vorgeschlagen, durch dnoeth in seiner Antwort auf Konvertieren von char zu int TeraData Sql , das funktioniert auch im TD-13.10 Uhr: