Autor
Brigitta Hauser, mit freundlicher Genehmigung von iNN eNews
SQL bietet viele Funktionen und Prädikate, die in RPG entweder überhaupt nicht oder nicht in der gleichen Form wie in SQL vorhanden sind. In vielen modernen Anwendungen muss es möglich sein Texte nach bestimmten Kriterien zu scannen. SQL bietet für solche Suchen das SQL Prädikat LIKE.
Die Frage ist nun, ob und wie es möglich ist das SQL Prädikat LIKE direkt in RPG zu verwenden.
Wie funktionniert überhaupt eine Text-Suche über das LIKE Prädikat?
Es werden zwei unterschiedliche Platzhalter verwendet:
- Das Prozent-Zeichen (%):
gibt eine unbestimmte Anzahl an beliebigen Zeichen an. Wird der Suchstring mit ‚%AB%C%‘ angegeben sind ‚ABxxxxC‘ sowie ‚xxABCxxx‘ gültige Zeichenfolgen. - Underline (_):
gibt genau ein beliebiges Zeichen an. Wird der Suchstring mit ‚%AB_C%‘ angebeben, so ist ‚ABxCxxx‘ gültig, nicht jedoch ‚ABxxxxC‘ oder ‚xxABCxxx‘
Dazu muss man ein beliebiges Zeichen dem Platzhalter, nach dem gesucht werden soll, voranstellen z.B. ‚%100!%%‘. In diesem Fall wird das Ausrufezeichen als Sonderzeichen verwendet.
Da jedes beliebige Zeichen verwendet werden kann, muss das Sonderzeichen mit ESCAPE ‚Sonderzeichen‘ direkt hinter dem Such-String angegeben werden.
Wird also nach dem Text ‚100%‘ gesucht, muss das Select-Statement etwa wie folgt aussehen:
Select MyField
from MyTSchema/MyTable
where MyField like '%100!%%' escape '!'
Wie verwendet man das LIKE-Prädikat, um in embedded SQL nach einem Text-String zu suchen?
Da es sich bei dem Prädikat und keine Funktion handelt, und somit nicht direkt in ein SET-Statement eingebunden werden. Aber es ist möglich in einer SET-Anweisung eine CASE-Anweisung (Vergleich) zu verwenden.
In der folgenden kleinen RPG-Funktion wird Found auf ‚1‘ gesetzt, wenn der Such-String im Text-String enthalten ist. Anderenfalls wird Found mit ‚0‘ ausgegeben. Je nach dem, ob der 3.Parameter (ESCAPE) übergeben wurde, werden unterschiedliche SET-Statements ausgeführt.
Die RPG-Funktion hat 3 Parameter:
- Original-Text
- Such-Zeigenfolge incl. der Platzhalter % und/oder _
- Der optionale Parameter Escape, in dem das Sonder-Zeichen angegeben wird, das für die Verwendung von ESCAPE erforderlich ist. This content is available for purchase. Please select from available options.
- 7 Euro/Monat NEWSabo digital - sofort zugreifen.
- 13,5 Euro/Monat NEWSabo plus inklusive 5x Login & Print-Ausgabe - sofort zugreifen.
Jahre später …
Vielen Dank für den sehr hilfreichen Artikel! Die Like-Funktion an sich ist schon interessant. Zusätzlich habe ich durch das Beispiel viele weitere Anregungen bekommen. (Dabei war ich eigentlich nur auf der Suche nach einer Beschreibung der Werte für die Option SRTSEQ bei CHGPF.)