MIDRANGE 02/2018

40 TECHNIK & INTEGRATION MIDRANGE MAGAZIN · 02/2018 SQL und reguläre Ausdrücke (Regular Expressions) Teil 1: Überblick Mit Hilfe von skalaren Funktionen und des Prädikats LIKE können alphanumerische Strings mit SQL gescannt werden. Sofern jedoch Texte nach komplexeren Regeln, zum Beispiel drei Buchstaben und zwei Zahlen jeweils zwischen 3 und 5, durchsucht werden müssen, kommt die zuvor erwähnte Technik schnell an ihre Grenzen. I n vielen Programmiersprachen wer- den für solche Textscans reguläre Ausdrücke (Regular Expressions) ver- wendet. Bei diesen handelt es sich um eine standardisierte Syntax, mit der komplexe Suchkriterien beschrieben werden können. In Release 7.2 TR2 wurde die Db2 for i um einige skalare Funktionen und Prädikate erweitert, die die Verarbeitung von regulären Ausdrücken erlauben. In diesem Ar- tikel werden die neuen Funktionen kurz vorgestellt, und es wird ein kur- zer Überblick über die Syntax, die zur Definition von regulären Ausdrücken verwendet wird, gegeben. Bevor sich jedoch mit den neuen Funktionen, die in der Db2 for i im- plementiert wurden, beschäftigt wird, sollen einige Grundlagen erläutert werden. Was sind reguläre Ausdrücke? Unter regulären Ausdrücken (Regular Expressions, REGEXP, REGEX) sind verallgemeinerte Suchmuster, mit de- ren Hilfe Texte gescannt und gefiltert werden können, zu verstehen. Die Implementierung der regulä- ren Ausdrücke in der Db2 for i basiert auf den International Components for Unicode (ICU) APIs (Application Pro- gramming Interfaces). ICU stellt für die Verarbeitung von Unicode-Texten eine Reihe von C/C++- und Java-Bibliotheken bereit. Diese Funktionen und Methoden können auf annähernd jeder Plattform, auf der C/C++ und/oder JAVA verwen- det werden, eingesetzt werden, also auch auf der IBM i. Die ICU APIs wur- den als Open Source für den Einsatz in freier, der Open-Source- und kommerzi- eller Software herausgegeben. Da die APIs für den Einsatz in SQL auf der Db2 for i in neuen skalaren Funktionen und Prädikaten implemen- tiert wurden, gelten für die regulären Ausdrücke die gleichen Regeln wie für C++ und JAVA. Beispiele von regulären Ausdrücken (zum Beispiel zum Prüfen von IP-Adressen), die im Internet nur für C++, JAVA, Javascript, PHP etc. ge- funden werden können, können in den SQL-Funktionen und -Prädikaten ver- wendet werden. Funktionen und Prädikate in Db2 for i Für die Verwendung von regulären Ausdrücken in Verbindung mit SQL wurden in der Db2 for i die folgenden Prädikate und Funktionen integriert: ó REGEXP_LIKE: Dabei handelt es sich um ein Prädikat, das ähnlich wie das Prädikat LIKE in den WHERE-Bedin- gungen angegeben werden muss. Der reguläre Ausdruck, nach dem ei- ne alphanumerische Spalte sowohl im Single Byte Character Set als auch im Double Byte Character Set mit fixer oder variabler Länge durchsucht wer- den soll, muss als zweiter Parameter angegeben werden. ó Sowohl der zu durchsuchende Text als auch der reguläre Ausdruck werden implizit in einen DBCLOB (Double Byte Character Large Object) String mit UTF-16 CCSID (Character Set ID) konvertiert. ó REGEXP_COUNT: Mit Hilfe dieser skalaren Funktion kann ermittelt werden, wie häufig eine Zeichenkom- bination, die dem regulären Ausdruck entspricht, innerhalb eines Strings vorkommt. Die Funktion gibt die Anzahl der Vor- kommen zurück. ó REGEXP_INSTR: Mit Hilfe dieser skalaren Funktion kann die Position des ersten oder auch eines beliebigen Vorkommens einer Zeichenkombi- nation, die dem regulären Ausdruck entspricht, ermittelt werden. Die Funktion gibt die Position des Vorkommens innerhalb des Strings zurück. Sofern kein Vorkommen ge- funden werden kann, wird der Wert 0 zurückgegeben. ó REGEXP_SUBSTR: Mit Hilfe dieser skalaren Funktion kann ein Textbe- reich, der dem regulären Ausdruck und dem angegebenen Vorkommen entspricht, aus einem vorgegebenen Text extrahiert werden. Die Funktion gibt den entsprechen- den Textbereich aus. ó REGEXP_REPLACE: Mit Hilfe dieser skalaren Funktion können Textberei- che, die dem angegebenen regulären Ausdruck entsprechen, durch einen vorgegebenen String ersetzt oder aus dem String entfernt werden. Die Funktion gibt den korrigierten Text aus.

RkJQdWJsaXNoZXIy NDM3NDQ=