Formelausdrücke
Formelausdrücke können an verschiedenen Stellen in MapEdit verwendet werden.
Konzept
Der Ausdrucks Auswerter unterstützt Ausdrücke ähnlich die einer SQL Where Bedingung. Er kann Ausdrücke auflösen und unterstützt Variablen und einen spezifizierten Satz von Funktionen.
Auch wenn Formelausdrücke wie SQL aussehen, sie sind keine SQL Befehle die auf der Datenbank ausgeführt werden. d.h. nur Funktionen und Operatoren die hier beschrieben sind können genutzt werden.
Unterstützte Operatoren und Funktionen
Reihenfolge | Operator/Funktion | Beschreibung | Beispiel |
---|---|---|---|
10 | () | Sub term | (COLUMN+1)=2 |
11 | CASE | Case expression | CASE WHEN a THEN b WHEN c THEN d ELSE e END |
15 | IN | Contained in list | COLUMN IN (1,2,3) |
15 | NVL | Replace NULL values | NVL(COLUMN,2)=2 |
15 | NVL2 | Replace NULL values | NVL2(COLUMN,1,2)=1 |
15 | COALESCE | Replace NULL values | COALESCE(COLUMN,1,2,3,4)=2 |
15 | CONCAT | Concatenate strings | CONCAT('a','b')='ab' |
15 | TRIM | Remove whitespace | TRIM(' abc')='abc' |
15 | LOWER | Convert string to lower case | LOWER('ABC')='abc' |
15 | UPPER | Convert string to upper case | UPPER('abc')='ABC' |
15 | ROUND | Round a numeric value | ROUND(1.234,2)=1.23 |
20 | IS NULL/IS NOT NULL | Check if value is NULL | COLUMN IS NULL |
21 | LIKE /NOT LIKE | Like operator | COLUMN LIKE 'A%' |
29 | NOT | Invert condition | NOT COLUMN IN(1,2,3) |
31 | * | Multiplication | COLUMN*1=2 |
32 | / | Division | COLUMN/1=2 |
41 | + | Addition | COLUMN+1=2 |
42 | - | Subtraction | COLUMN-1=2 |
49 | || | Concatenate strings | COLUMN||COLUMN2='ab' |
61 | < | Is smaller? | COLUMN<1 |
62 | <= | Is smaller or equal? | COLUMN<=1 |
63 | > | Is larger? | COLUMN>1 |
64 | >= | Is larger or equal? | COLUMN>=1 |
71 | ==/= | Is equal? | COLUMN=1 |
72 | !=/<> | Is not equal? | COLUMN!=1 |
111 | AND | Logical AND | COLUMN=1 AND COLUMN2=2 |
121 | OR | Logical OR | COLUMN=1 OR COLUMN2=2 |
Die Rangfolge ist so gestaltet, dass Prioritäten wie "Punktrechnung vor Strichrechnung" beim Auflösen beachtet werden - alternativ kann man die Terme auch einklammern. Damit können hier komplexere Bedingungen erstellt werden wie zum Beispiel: COLUMN='Value' OR COLUMN2 IN(A,B,C)
Erweiterte Funktionen
Ab Version 24.1.148
Die folgenden erweiterten Funktionen stehen nur an folgende Stellen zur Verfügung.
- Function Button in Generischen Dialogen
- Formula (Formel Feld) in Generischen Dialogen
- Report Designer
Diese Funktionen sind im Darstellungsmodell mit Absicht nicht verfügbar da diese in MapEdit Core (Java/MapEdit Mobile/Web) stand heute nicht zur Verfügung stehen und damit nicht funktionieren würden.
Name | Beschreibung |
---|---|
DECODE | Werte auflösen |
INSTR | Text Position finden |
SUBSTR | Teil von Text ausschneiden |
CONTAINS | Enthält Text Prüfung |
REPLACE | Text ersetzen |
LENGTH | Text Länge ermitteln |
STARTSWITH | Fängt Text mit Textteil an |
ENDSWITH | Endet Text mit Textteil |
LPAD | Text mit Zeichen auffüllen von Links |
RPAD | Text mit Zeichen auffüllen von Rechts |
TODATE | Wandelt einen Text in ein Datum um (ab Version 24.2.39) |
DECODE - Werte auflösen
Decode Anweisung (Ähnlich wie in Oracle)
Ist ähnlich zu einer IF ~ THEN ~ ELSE Anweisung.
Syntax:
DECODE(Wert, Wert 1, Ergebnis 1,Wert 2, Ergebnis 2,...Wert n, Ergebnis n, Ergebnis wenn kein Wert gefunden)
Result: Ergebnis
Der Wert "Ergebnis wenn kein Wert gefunden" ist optional. Wird dieser nicht angegeben dann wird NULL Zureuck geliefert wenn kein Wert gefunden wird.
Beispiel
DECODE (id_farbe, 1,'Rot',2,'Blau','andere')
Inhalt des Feldes "id_farbe" ist 2
Resultat: 'Blau'
Inhalt des Feldes "id_farbe" ist 17
Resultat: 'andere'
INSTR - Position finden
Liefert zurück an welcher Position eines Textes sich ein Text Teil befindet.
Syntax:
INSTR(Text, Text Teil)
Resultat: Ganzzahl
Beispiel:
INSTR('Ditzingen','ing')
Resultat: 5
SUBSTR - Text Teil zurückgeben
Liefert den Teil eines Textes ab einer gegebenen Start Position. Optional kann die Länge des Text Teiles angegeben werden.
Syntax:
SUBSTR(Text, Start)
Resultat: Text
oder
SUBSTR(Text, Start, Länge)
Resultat: Text
Beispiele:
SUBSTR('12345',2)
Resultat: '2345'
SUBSTR('Schlubbelipubs',4,3)
Resultat: 'lub'
CONTAINS - Ist Text enthalten
Liefert "true" zurück wenn der Textteil im Text vorhanden ist, ansonsten wird "false" rück geliefert.
Syntax:
CONTAINS(Text, Textteil)
Resultat: true/false (boolean)
Beispiel:
CONTAINS('Test','es')
Resultat: true
REPLACE - Textteile ersetzen
Syntax:
Replace(Text, Textteil der Ausgetauscht werden soll,Text mit dem der Textteil ausgetauscht werden soll)
Resultat: Text
Beispiele:
REPLACE('Tester','e','x')
Resultat: 'Txstxr'
REPLACE('Immer so einer','er','xx')
Resultat: 'Immxx so einxx'
LENGTH - Text Länge ermitteln
Liefert die Länge des angegebenen Textes zurück
Syntax:
LENGTH(Text)
Resultat: Ganzzahl
Beispiel
LENGTH('Hallo')
Resultat: 5
LPAD - Text auffüllen
Füllt einen Text von Links mit einem Zeichen bis zu der angegeben Länge.
Syntax:
LPAD(Text, Gesammt Länge, Einzelnes Zeichen)
Resultat: Text
Beispiel:
LPAD('Test',10, '*')
Resultat: ******Test
LPAD('Test',10, '-')
Resultat: ------Test
LPAD('17',10, '0')
Resultat: 0000000017
RPAD - Text auffüllen
Füllt einen Text von Rechts mit einem Zeichen bis zu der angegeben Länge.
Syntax:
RPAD(Text, Gesammt Länge, Einzelnes Zeichen)
Resultat: Text
Beispiel:
RPAD('Test',10, '*')
Resultat: Test******
RPAD('17',10, '0')
Resultat: 1700000000
STARTSWITH - Fängt Text mit anderem Text an
Liefert True wenn ein Text mit dem Text anfängt
Syntax:
STARTSWITH(Text, Text)
Resultat: true/false (boolean)
Beispiele:
STARTSWITH('Test','Te')
Resultat: true
STARTSWITH('Test','es')
Resultat: false
ENDSWITH - Endet Text mit anderem Text an
Liefert True wenn ein Text mit dem Text endet
Syntax:
ENDSWITH(Text, Text)
Resultat: true/false (boolean)
Beispiele:
ENDSWITH('Test','st')
Resultat: true
ENDSWITH('Test','es')
Resultat: false
TODATE - Wandelt einen Text in ein Datum um
ab Version 24.2.39
Syntax:
TODATE('Datumsausdruck als text')
Resultat: Datum (DateTime)
Beispiele:
TODATE('05.12.1970 11:15:22')