Filterbedingung Crash-Kurs für Expertenmodus

<< Klicken um das Inhaltsverzeichnis anzuzeigen >>

Navigation:  Karten-Explorer > Attribute manipulieren > Attribute bearbeiten > Berechnen/Ersetzen >

Filterbedingung Crash-Kurs für Expertenmodus

Previous pageReturn to chapter overviewNext page

Crash-Kurs für die Syntax von Filterbedingungen

 

Filterbedingungen stellen logische Ausdrücke dar. In der Regel handelt es sich um Vergleichsoperationen nach dem Schema Feldname Operator Wert wie z.B. Rind > 0 für ein numerisches Feld oder Name = 'Meier' für ein Zeichenkettenfeld. Abhängig vom Typ des betreffenden Feldes (Zeichen, Numerisch, Logisch oder Datum) sind einige Besonderheiten bei der Notation der Bedingungen zu beachten. Des weiteren  können mehrere Teilbedingungen angegeben werden, die dann durch logische Operatoren (.and. bzw. .or.) verknüpft werden wir z.B. Rind > 0 .or. Schwein > 0.

Der kleine Crash-Kurs in in folgende Abschnitte unterteilt:

Übersicht Vergleichsoperatoren

numerische Felder

Zeichenfelder

Datumsfelder

Logische Felder

Verknüpfungen - Logische Operatoren

Übersicht Vergleichsoperatoren

Vergleichsoperatoren sind das A und O bei der Definition von Bedingungen für Filterausdrücke. Die folgende Tabelle enthält eine Übersicht. Beachten Sie, dass die konkrete Anwendung eines Vergleichsoperators häufig vom Typ des jeweiligen Feldes abhängig ist.

Vergleichsoperatoren

<

kleiner

=

gleich

==

genau gleich (exakter Vergleichsoperator verweisZeichenfelder)

>

größer

<=

kleiner (oder) gleich

<>

ungleich (alternativ können # oder != verwendet werden)

>=

größer (oder) gleich

$

"Enthalten"-Operator für verweisZeichenfelder

Numerische Felder

Numerische Felder enthalten ausschließlich Zahlen (ggf. Komma und Vorzeichen). Vergleiche folgen den Regeln der Mathematik, d. h., es werden immer alle Ziffern als Gesamtheit entsprechend ihres Zahlenwertes betrachtet und in Relation zu anderen Zahlen gesetzt wie 1,3 < 5 < 199 usw.

Beispiele:

Rind > 0 findet alle Einträge mit Rindern!

Rind <> 0 findet alle Einträge mit Rindern!

Schwein > 100 findet alle Einträge mit mehr als 100 Schweinen!

Schwein >= 100 findet alle Einträge mit 100 oder mehr Schweinen!

Außerdem kann man mit numerischen Felder selbstverständlich rechnen, was für Ihre Fälle durchaus von Bedeutung sein könnte. So kann man für den Filter "Klauentiere" notieren: Rind+Schaf+Ziege+Schwein+Gatterwild>0. Alternativ kann man aber auch mit Teilbedingungen und Verknüpfungen arbeiten wie Rind>0 .or. Schaf>0 .or. Ziege>0 .or. Schwein>0 .or. Gatterwild>0.

numerische Operatoren (Auszug)

+

Addition

-

Subtraktion

*

Multiplikation

/

Division

^

Potenzieren

wichtige Funktionen

Min

Min( Zahl1, Zahl2 ) Zahl ... ermittelt das Minimum zweier Zahlen

Max

Max( Zahl1, Zahl2 ) Zahl ... ermittelt das Maximum zweier Zahlen

Val

Val( Text ) Zahl ... wandelt eine Zeichenkette in eine Zahl um

Zeichenfelder

Werte sind in einfache Hochkommata einzuschließen, wie z.B. Name = 'Meier' oder Name = "Meier"

 

Es wird zwischen dem Vergleichsoperator (=) und dem exakten Vergleichsoperator (==) unterschieden. Der Vergleichsoperator (=) vergleicht "zeichenweise". Der Vergleich wird spätestens beendet, wenn das Ende der rechten Zeichenkette erreicht ist. Damit liefert 'ABCDE'  =  'ABC' logisch "Wahr". Wollen Sie jedoch ermitteln, ob ein Ausdruck auf der linken Seite exakt mit dem auf der rechten Seite übereinstimmt (Wert und Länge), verwenden Sie den exakten Vergleichsoperator (==), bei dem der Ausdruck 'ABCDE'  ==  'ABC' logisch "Falsch" und nur 'ABCDE'  ==  'ABCDE' logisch "Wahr" ergibt.

 

Groß-/Kleinschreibung ist für Werte signifikant! Das bedeutet 'A' ist nicht gleich 'a'. Wenn Sie Vergleiche unabhängig von Groß- und Kleinschreibung machen wollen, verwenden Sie die Funktionen Upper() oder Lower(), die den Text wahlweise in Groß- bzw. Kleinbuchstaben umwandeln wie Upper(Ort) = 'WUSTERHAUSEN'.

 

Um zu ermitteln, ob eine Zeichenkette leer ist, verwenden Sie z.B. den Ausdruck Name = " " (mit einem Leerzeichen zwischen den Anführungszeichen!). Alternativ kann auch Len( Trim( Name ) = 0 verwendet werden.

 

Demzufolge ermittelt der Ausdruck Name != " " (mit einem Leerzeichen zwischen den Anführungszeichen!), ob das Feld Name nicht leer ist. Alternativ kann auch Len( Trim( Name ) > 0 verwendet werden.

 

Zeichenfelder können Buchstaben, Ziffern und Sonderzeichen enthalten. Die Vergleichsoperationen können angewendet werden, arbeiten jedoch nicht wie bei numerischen Feldern. Bei Zeichenketten werden Zeichen von links beginnend stellenweise verglichen. Ausschlaggebend dabei ist der Wert des Zeichens in der Zeichentabelle (so genannte ASCII-Tabelle).

 

Es gilt:

'A' < 'B', weil 'A' in der ASCII-Tabelle vor dem 'B' steht!

'1' < 'C', weil Ziffern in der ASCII-Tabelle vor Buchstaben stehen!

'139' < '9', weil stellenweise verglichen wird und '1' < '9' ist!

 

Bespiele:

Name > 'D' findet alle Einträge die mit 'E', 'F' .. 'Z' beginnen!

Name < 'D' findet alle Einträge die mit '', 'A', 'B', 'C' beginnen!

 

Der $-Operator ermittelt, ob eine Zeichenkette in einer anderen enthalten ist. Dabei spielt die Position keine Rolle. So liefert "Stone" $ "Rolling Stones" logisch "Wahr".

Beispiele:

Name == 'Meier' - Name muss exakt Meier sein!

Name = 'Meier' - Name muss mit Meier beginnen!

'Meier' $ Name - Name muss (irgendwo) Meier enthalten!

wichtige Funktionen

Left

Left( Text, Anzahl ) Zeichen ... ermittelt den linken Teil einer Zeichenkette

Right

Right( Text, Anzahl ) Zeichen ... ermittelt den rechten Teil einer Zeichenkette

Substr

Substr( Text, Startposition, Anzahl ) Zeichen ... gibt die gewünschte Anzahl der Zeichen ab der Startposition zurück

Str

Str( Zahl ) oder Str( Zahl, Länge, Dezimal ) Zeichen ... wandelt eine Zahl in eine Zeichenkette um. Optional können Länge (inklusive Dezimalpunkt und Nachkommastellen) und Anzahl der Nachkommastellen angegeben werden

At

At( Suchtext, Text ) Zahl ... ermittelt die Position des Auftretens von Suchtext im Text und gibt sie zurück (0, wenn nicht gefunden)

Upper

Upper( Text ) Zeichen ... wandelt Text in Großbuchstaben um

Lower

Lower( Text ) Zeichen ... wandelt Text in Kleinbuchstaben um

Len

Len( Text ) Numerisch ... ermittelt die Länge einer Zeichenkette

LTrim

LTrim( Text ) Zeichen ... entfernt führende Leerzeichen

Trim

Trim( Text ) Zeichen ... entfernt Leerzeichen am Ende

AllTrim

AllTrim( Text ) Zeichen ... entfernt führende Leerzeichen und Leerzeichen am Ende

Zeichenkettenoperatoren

+

fügt 2 Zeichenketten zusammen

-

fügt 2 Zeichenketten zusammen und entfernt abschließende Leerzeichen in der ersten

Datumsfelder

Werte vom Typ Datum, wie sie z.B. für Vergleichsoperationen benötigt werden, können mit der Funktion CtoD() generiert werden, wie z.B. CtoD( '31.08.2003' ).

Alle Vergleichsoperatoren wie =, ==, <>, #, !=, und Ordnungsoperatoren wie <, >, <=, >= können auf den Typ Datum angewendet werden, wie z.B. Datum < CtoD( '01.01.2003' ).

Um zu ermitteln, ob eine Datumsangabe leer ist, kann die Funktion Empty() oder die Notation CtoD("") verwendet werden.

Demzufolge ist der Test auf ein leeres Datum über Empty( Datum ) oder Datum = CtoD("") möglich.

Tage können addiert und subtrahiert werden. Für 01.01.2003 - 1 ist das Ergebnis 31.12.2002 und 01.01.2003 + 31 ergibt sich 01.02.2003.

Die Differenz zwischen Kalenderdaten kann durch Subtraktion von 2 Datumswerten ermittelt werden.

wichtige Funktionen

Empty

Empty( Datum ) Logisch ... ermittelt, ob ein Datum leer ist

Today

Today() Datum ... gibt das Tagesdatum zurück

CtoD

CtoD( Zeichenkette ) Datum ... wandelt eine Zeichenkette in ein Datum um

DtoC

DtoC( Datum ) Zeichen ... wandelt ein Datum in eine Zeichenkette um

Year

Year( Datum ) Zahl ... ermittelt die Jahreszahl aus einem Datum

Month

Month( Datum ) Zahl ... separiert die Nummer des Monats aus einem Datum

Day

Day( Datum ) Zahl ... separiert den Tag aus einem Datum

Min

Min( Datum1, Datum2 ) Datum ... ermittelt das Minimum zweier Datumswerte

Max

Max( Datum1, Datum2 ) Datum ... ermittelt das Maximum zweier Datumswerte

Datumsoperatoren

+

Datum + Zahl Datum ... addiert n Tage zu einem Datum

-

Datum - Zahl Datum ... subtrahiert n Tage von einem Datum

Datum1 - Datum2 Zahl ... ermittelt die Differenz aus 2 Datumswerten

Logische Felder

Logische Felder sind Datenbankfelder, die genau zwei Zustände annehmen können nämlich die Wahrheitswerte "Wahr" oder "Falsch". Diese Werte werden durch .T. oder .F. (auch .t. oder .f.) definiert.

Um zu ermitteln, ob ein Feld "Wahr" oder "Falsch" ist, kann der Vergleichsoperator = oder != (auch # oder <>) verwendet werden wie z.B. Untersucht = .t. oder Untersucht = .f.

Es ist jedoch eine leichtere Notation möglich, indem man lediglich notiert Untersucht (gleich bedeutend mit Untersucht = .t.) oder !Untersucht (gleich bedeutend mit Untersucht = .f., das Ausrufungszeichen steht für die Negation).

Eng verwandt mit  logischen Feldern sind logische Ausdrucke wie Vergleiche (z.B. Rind > 10) die ebenfalls einen Wahrheitswert .t. oder .f. für "wahr" oder "falsch" liefern.

Verknüpfungen - Logische Operatoren

Logische Operatoren kommen dann ins Spiel, wenn mehrere Teilbedingungen zu verknüpfen sind.

logische Operatoren

.and.

verknüpft Teilbedingungen mit einem logischen UND, so dass jede Teilbedingung erfüllt sein muss

.or.

verknüpft Teilbedingungen mit einem logischen ODER, so dass mindestens eine Teilbedingung erfüllt sein muss

.not. oder !

negiert eine Bedingung

Feldname1 Operator1 Wert1 .or. Feldname2 Operator2 Wert2

Feldname1 Operator1 Wert1 .and. Feldname2 Operator2 Wert2

Beispiel

Wirkung

Rind > 0 .and. Schwein > 0

Alle Tierhalter, die sowohl Rinder als auch Schweine besitzen, werden verarbeitet.

Rind > 0 .or. Schwein > 0

Alle Tierhalter, die entweder Rinder oder Schweine (oder beides) besitzen, werden verarbeitet.

Rind > 0 .and. Schwein = 0

Alle Tierhalter, die Rinder und keine Schweine besitzen, werden verarbeitet.

Nicht unerwähnt bleiben soll, dass bei der Formulierung mehrer Teilbedingungen ein Problem auftritt, das Sie aus der Mathematik kennen. Erinnern Sie sich: (3+5)*3 = 24 und 3+5*3=18. Wenn Sie komplizierte Bedingungen mit mehreren "And" und "Or" verwenden und sich nicht sicher sind, in welcher Reihenfolge sie abgearbeitet werden, dann setzen Sie sicherheitshalber Klammern ().