-
SCANNEN Buchstabenfolge
Hallo,
gibt es eine einfache Möglichkeit eine Buchstabenfolge in einem Feld zu scannen ohne Berücksichtigung der Groß/Kleinschreibung.
Mit %SCAN finde ich nur die Suchargumente wo Groß/Kleinschreibung übereinstimmen. Ich habe nun eine Suche und möchte eine Anzeige die nur die Buchstaben überprüft, egal ob groß oder kleingeschrieben.
Danke.
-
Hallo,
Embedded SQL:
Code:
Exec Sql Set :ergebnis = case when upper('abcd') like 'ABC%' then 1 else 0 end;
lg Andreas
-
Mit Variablen sollte das so aussehen:
Vergleich = '%abcd%';
exec SQL set : Ergebnis = case when upper(: feld) like trim(upper(: Vergleich)) then 1 else 0 end;
Wichtig ist der Trim für das Vergleichsfeld, da sonst die Leerzeichen mit gesucht werden.
Möchte man die Position dann geht das über:
vergleich = 'abcd';
exec SQL set : Ergebnis = posstr(upper(: Vergleich), upper(: Feld));
-
Natürlich gehört der TRIM auch zum 2. Beispiel.
-
Und ohne SQL:
D lo c 'abcdefghijklmnopqrstuvwxyz'
D up c 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
Gefunden = *off;
if %scan('ABC' : %xlate(lo : up : String) : 1) > 0;
Gefunden = *on;
endif;
-
Da werden dann aber sämtliche Sonderzeichen (éâ...) und Umlaute ausgeschlossen.
Diese Sonderzeichen sollten aber nicht im Code eingetragen werden da sie dann nicht CCSID-Unabhängig verwendet werden können.
SQL arbeitet mit der CCSID des Job's und damit klappt es auch mit Sonderzeichen.
SQL kann auch mit Unicode Feldtyp "C" umgehen.
-
Vielleicht noch eine Anmerkung zu der SQL-Geschichte:
1. Ein Trim ist nicht unbedingt erforderlich, wenn die Host-Variable mit variabler Länge definiert wurde und die führenden/folgenden Blanks bereits vorab entfernt wurden. (Ein zusätzlicher SQL-TRIM ist natürlich auf alle Fälle sicherer.
2. Auf die Konvertierung mit UPPER oder LOWER kann man verzichten, wenn man die Sortierreihenfolgen LANGIDSHR verwendet. Große und kleine Buchstaben erhalten dann die gleiche Wertigkeit. Die Sortierreihenfolge kann in dem SET OPTION Statement gesetzt werden. Dabei ist allerdings zu beachten, dass die gesetzte Sortierreihenfolge unversell, für alle SQL-Statments gilt und innerhalb des Moduls nicht mehr geändert werden kann. Es macht jedoch durchaus Sinn sich alle Funktionen, mit denen caseinsensitive verglichten, durchsucht oder geändert werden in einem einzigen Modul zu hinterlegen und dieses in ein Service-Programm zu binden.
3. Ich würde auch die % Zeichen im SQL-Statement hinterlegen.
Code:
Exec SQL Set Option SortSeq = *LangIdShr, ... weitere Optionen;
Exec SQL Set :isFound = Case When :HostVar Like '%' concat Trim(:Vergleich) concat '%'
Then 1 else 0 End;
oder
Code:
Exec SQL Set :Position = PosStr(Trim(:Vergleich), Trim(:HostVar));
oder Locate funktioniert wie Posstr, nur dass es einen optionalen 3 Parameter hat über den die Position ab der gesucht werden soll angegeben werden kann.
Code:
Exec SQL Set :Position = Locate(Trim(:HostVar), Trim(:Vergleich));
Birgitta
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks