Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_string_vergleich

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
prog:oracle_string_vergleich [2016/03/24 16:48]
gpipperr [In der Datenbank Strings vergleichen, Ähnlichkeiten in String qualifizieren]
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 "Gunther" = "gunther" gleich oder nur ähnlich? Und wie ähnlich ist dann das ganze?
 +
 +----
 +
 +=== 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:sql_nls_comp_nls_sort_inguistic_search_sorting|NLS_COMP und NLS_SORT für Linguistische Vergleiche und Case Ignore in der Oracle Datenbank]]
 +
 +<code sql>
 +SELECT *  FROM DUAL WHERE 'Gunther' = 'gunther';
 +
 +
 +no rows selected
 +
 +
 +alter session set NLS_COMP=LINGUISTIC;
 +alter session set NLS_SORT=BINARY_CI;
 +
 +SELECT *  FROM DUAL WHERE 'Gunther' = 'gunther';
 +
 +DUM
 +---
 +X
 +</code>
 +
 +<fc #800000>!Achtung!</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 - "Levenshtein Distance" ===
 +
 +Wie stark unterscheiden sich zwei Strings => https://en.wikipedia.org/wiki/Levenshtein_distance
 +
 +<code sql>
 +SELECT UTL_MATCH.Edit_Distance('abcde', 'cdef') as sd FROM DUAL;
 +
 +sd
 +--
 +3
 +
 +-- Als Wert zwischen 0 und 100 (100=gleich)
 +
 +SELECT UTL_MATCH.Edit_Distance_SIMILARITY('abcde', 'cdef') as sd FROM DUAL;
 +
 +sd
 +--
 +40
 +
 +</code>
 +
 +Die Distance zwischen zwei Strings ist die Anzahl an Einfügungen, Löschungen und Substitutionen um den ersten String in den zweiten zu überführen, die kleinste Anzahl der notwendigen Änderungen
 +
 +
 +
 +===JARO_WINKLER Funktion===
 +
 +Ähnlichkeit zweier Strings quantifizieren => siehe https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance 
 +
 +<code sql>
 +set numwidth 30
 +
 +
 +
 +SELECT UTL_MATCH.JARO_WINKLER('gunther', 'gunter' as sq FROM DUAL;
 +
 +sq
 +---
 + 9.7142857142857142E-001
 +
 +
 +
 +
 +-- Als Wert zwischen 0 und 100 (100=gleich)
 +
 +SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('gunther', 'gunter' as sq FROM DUAL;
 +
 + SQ
 +---
 + 97
 +
 +</code>
 +
 +
 +
 +----
 +
 +==== Quellen ====
 +
 +Person
 +
 +  * Gespräch mit Bruno Cirone => http://www.cirone.de/
 +
 +Web
 +
 +  * Fast Similarity Searches => https://www.informatik.hu-berlin.de/de/forschung/gebiete/wbi/research/publications/2010/doag2010_final.pdf
 +  * https://en.wikipedia.org/wiki/Hamming_distance
 +
 +
 +12c Doku
 +  * https://docs.oracle.com/database/121/ARPLS/u_match.htm#ARPLS352
 +
  
"Autor: Gunther Pipperr"
prog/oracle_string_vergleich.txt · Zuletzt geändert: 2016/03/25 16:50 von gpipperr