prog:oracle_string_vergleich
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
prog:oracle_string_vergleich [2016/03/24 16:47] – [Quellen] gpipperr | prog:oracle_string_vergleich [2016/03/25 16:50] (aktuell) – gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | =====In der Oracle Datenbank Strings vergleichen und Ähnlichkeiten in String qualifizieren===== | ||
+ | **10g R2 / 11g / 12c ** | ||
+ | |||
+ | Wie gleich bzw. wie ähnlich sind zwei Strings? Diese Frage stellt sich oft wenn Kundennamen und Adressen aus verschiedenen Quellen zusammen gezogen werden sollen. | ||
+ | Beispiel: | ||
+ | |||
+ | Ist der String " | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === Case in sensitive vergleichen und sortieren==== | ||
+ | |||
+ | Geht es nur darum die GROSS/klein Schreibung zu ignorieren, muss das entweder über eine upper/lower Funktion erfolgen oder die ganze Session wird auf einen Linguistischen Vergleich umgestellt. | ||
+ | |||
+ | siehe auch [[prog: | ||
+ | |||
+ | <code sql> | ||
+ | SELECT * FROM DUAL WHERE ' | ||
+ | |||
+ | |||
+ | no rows selected | ||
+ | |||
+ | |||
+ | alter session set NLS_COMP=LINGUISTIC; | ||
+ | alter session set NLS_SORT=BINARY_CI; | ||
+ | |||
+ | SELECT * FROM DUAL WHERE ' | ||
+ | |||
+ | DUM | ||
+ | --- | ||
+ | X | ||
+ | </ | ||
+ | |||
+ | <fc # | ||
+ | |||
+ | Im Ausführungsplan wird dann aber evtl. ein vorhandener Index auf die Spalte nicht mehr verwendet, da die Filterbedingung für den Linguistischen Vergleich als Funktion im Hintergrund vom Optimzier einbaut wird! | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== UTL_MATCH Package für den String Vergleich ==== | ||
+ | |||
+ | Seit Oracle 11g R1 offiziell unterstützt. | ||
+ | |||
+ | ===Edit Distance - " | ||
+ | |||
+ | Wie stark unterscheiden sich zwei Strings => https:// | ||
+ | |||
+ | <code sql> | ||
+ | SELECT UTL_MATCH.Edit_Distance(' | ||
+ | |||
+ | sd | ||
+ | -- | ||
+ | 3 | ||
+ | |||
+ | -- Als Wert zwischen 0 und 100 (100=gleich) | ||
+ | |||
+ | SELECT UTL_MATCH.Edit_Distance_SIMILARITY(' | ||
+ | |||
+ | sd | ||
+ | -- | ||
+ | 40 | ||
+ | |||
+ | </ | ||
+ | |||
+ | Die Distance zwischen zwei Strings ist die Anzahl an Einfügungen, | ||
+ | |||
+ | |||
+ | |||
+ | ===JARO_WINKLER Funktion=== | ||
+ | |||
+ | Ähnlichkeit zweier Strings quantifizieren => siehe https:// | ||
+ | |||
+ | <code sql> | ||
+ | set numwidth 30 | ||
+ | |||
+ | |||
+ | |||
+ | SELECT UTL_MATCH.JARO_WINKLER(' | ||
+ | |||
+ | sq | ||
+ | --- | ||
+ | | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | -- Als Wert zwischen 0 und 100 (100=gleich) | ||
+ | |||
+ | SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY(' | ||
+ | |||
+ | SQ | ||
+ | --- | ||
+ | 97 | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Quellen ==== | ||
+ | |||
+ | Person | ||
+ | |||
+ | * Gespräch mit Bruno Cirone => http:// | ||
+ | |||
+ | Web | ||
+ | |||
+ | * Fast Similarity Searches => https:// | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | 12c Doku | ||
+ | * https:// | ||
+ | |||
prog/oracle_string_vergleich.txt · Zuletzt geändert: 2016/03/25 16:50 von gpipperr