---
title: "Benutzerdefinierter SQL-Filter"
sidebar:
  label: "Übersicht"
topicId: "Liste_SQL_Statements"
contextId: 71
editionen: [professional, server]
status: aktualisiert
version: "5.4"
---
Mit dem **Benutzerdefinierten SQL-Filter** filtern Sie Ihren Datenbestand mit eigenen Bedingungen in SQL. So sind auch sehr komplexe Abfragen möglich. Dafür benötigen Sie Grundkenntnisse der SQL-Syntax.

Siehe auch [Syntaxhilfe](/desktop/daten-finden-und-bearbeiten/benutzerdefinierter-sql-filter/syntaxhilfe) und [Beispiele für SQL-Abfragen](/desktop/daten-finden-und-bearbeiten/benutzerdefinierter-sql-filter/beispiele-fuer-sql-abfragen).

## SQL-Filter einblenden

Klicken Sie im Modul **Liste** im Menüband auf **Liste › Filteransicht › SQL-Filter**. Unterhalb der Liste erscheint der Bereich **Benutzerdefinierter SQL-Filter** mit dem Eingabefeld und den Schaltflächen **Prüfen**, **Ausführen**, **Speichern** und **Laden**.

![Bereich Benutzerdefinierter SQL-Filter mit einem Datumsbereich](/blume-assets/content/assets/screenshots/desktop/sql-filter-bereich.png)

## Mit dem SQL-Filter arbeiten

1. Geben Sie die Bedingung in das Eingabefeld ein, zum Beispiel alle Beobachtungen zwischen dem 01.01.2025 und dem 31.03.2025:

   ```sql
   WHERE Datum >= '01.01.2025' AND Datum <= '31.03.2025'
   ```

   oder

   ```sql
   WHERE Datum BETWEEN '01.01.2025' AND '31.03.2025'
   ```

2. Klicken Sie auf **Prüfen**, um die Syntax prüfen zu lassen. Ist sie fehlerhaft, zeigt MultiBaseCS eine Fehlermeldung, die Ihnen hilft, den Fehler zu finden.
3. Klicken Sie auf **Ausführen** oder drücken Sie die Eingabetaste. Einen Zeilenumbruch im Eingabefeld erzeugen Sie mit Umschalt+Eingabe.

Die Liste zeigt nun nur noch die passenden Beobachtungen. Die Statusleiste weist darauf hin, dass ein Filter aktiv ist.

Sie können die Bedingung beliebig erweitern. Alle Beobachtungen im selben Zeitraum, deren Art der Biber ist:

```sql
WHERE (Datum BETWEEN '01.01.2025' AND '31.03.2025') AND Art_deutsch LIKE 'Biber'
```

Alle Beobachtungen aus diesem Zeitraum **oder** alle Beobachtungen des Bibers:

```sql
WHERE (Datum BETWEEN '01.01.2025' AND '31.03.2025') OR Art_deutsch LIKE 'Biber'
```

:::note
Beginnt die Anweisung mit `SELECT`, führt MultiBaseCS sie als eigene Abfrage aus und zeigt deren Ergebnis anstelle der Beobachtungen in der Liste an. Dafür benötigen Sie die entsprechende Berechtigung. Anweisungen, die Daten ändern (zum Beispiel `UPDATE`), dürfen nur Benutzer mit der Berechtigung zum Ändern per SQL ausführen.
:::

## Menü des SQL-Filters

Über die Menüschaltfläche rechts im Kopf des Bereichs **Benutzerdefinierter SQL-Filter** erreichen Sie weitere Befehle:

![Menü des SQL-Filters](/blume-assets/content/assets/screenshots/desktop/sql-menue.png)

| Befehl | Wirkung |
| --- | --- |
| Ermittle Anzahl | Zählt die Beobachtungen, die der aktive Filter liefert. |
| SQL-Statement anzeigen | Zeigt die vollständige SQL-Anweisung, die zuletzt ausgeführt wurde. |
| Automatische Syntaxkorrektur | Schaltet die automatische Syntaxkorrektur ein oder aus (siehe unten). |
| Einfache Syntaxhilfe verwenden | Schaltet zwischen einfacher und komplexer [Syntaxhilfe](/desktop/daten-finden-und-bearbeiten/benutzerdefinierter-sql-filter/syntaxhilfe) um. |
| aktuellen Filter anzeigen | Zeigt die Bedingung des aktiven benutzerdefinierten Filters in einem eigenen Fenster. |
| Filter löschen | Setzt das Eingabefeld auf `WHERE` zurück. |
| Filter entfernen | Hebt den Filter auf und zeigt wieder alle Beobachtungen. |
| Prompt für KI erstellen | Erstellt aus Ihrer Beschreibung einen Prompt für eine KI wie ChatGPT (siehe unten). |
| SQL-Statement suchen, SQL-Statement speichern, SQL-Statements bearbeiten | Gespeicherte SQL-Statements verwalten (siehe unten). |
| Schriftgröße anpassen | Stellt die Schrift im Eingabefeld auf **Klein**, **Mittel** oder **Groß**. |

## Hinweise zur SQL-Syntax

Eine Bedingung im SQL-Filter ist so aufgebaut:

- Sie beginnt mit dem Schlüsselwort `WHERE` (Suche alle Beobachtungen, bei denen ...).
- Danach folgen eine oder mehrere Bedingungen.
- Mehrere Bedingungen verknüpfen Sie mit `AND` (und) oder `OR` (oder).
- Verschachtelte Bedingungen gliedern Sie mit Klammern.

```sql
WHERE Bedingung
WHERE Bedingung1 AND Bedingung2
WHERE Bedingung1 OR Bedingung2
WHERE (Bedingung1 OR Bedingung2) AND Bedingung3
```

Achten Sie bei der Kombination von `AND` und `OR` auf die Klammern. Ohne Klammern wertet die Datenbank zuerst alle `AND`-Verknüpfungen aus und erst danach die `OR`-Verknüpfungen.

Eine Bedingung besteht aus einem Feldnamen (`Art_deutsch`), einem Operator (`=`) und einem Wert (`'Biber'`):

```sql
Art_deutsch = 'Biber'
```

Folgende Operatoren stehen zur Verfügung:

| Operator | Bedeutung |
| --- | --- |
| `=` | gleich |
| `<>` | ungleich |
| `<` | kleiner |
| `<=` | kleiner oder gleich |
| `>` | größer |
| `>=` | größer oder gleich |
| `LIKE` | Textvergleich, auch mit Platzhalterzeichen |

Verwenden Sie Platzhalterzeichen, müssen Sie `LIKE` als Operator verwenden. Mit `=` liefert die Suche sonst kein Ergebnis.

## Werte richtig angeben

Wie Sie einen Wert schreiben, hängt vom Datentyp des Feldes ab.

**Zahlenfelder:** Geben Sie den Wert direkt an.

```sql
WHERE ID_Art = 12345
WHERE MTB = 4642
```

**Textfelder:** Setzen Sie den Wert in einfache Anführungszeichen (Umschalt+#).

```sql
WHERE Art_deutsch = 'Biber'
WHERE Art_deutsch LIKE 'Biber*'
```

Alle Orte von A bis F:

```sql
WHERE Ort BETWEEN 'A*' AND 'F*'
```

**Ja/Nein-Felder:** Auf Microsoft SQL Server und Oracle steht `1` für Ja und `0` für Nein.

```sql
WHERE Flag_Export = 1
```

## Platzhalterzeichen

Mit Platzhalterzeichen (Wildcards) suchen Sie nach Texten, von denen Sie nur einen Teil kennen, etwa den Anfang, das Ende oder ein Mittelstück.

Der Stern (`*`) steht für eine beliebige Zeichenfolge:

- `Flussb*` findet _Flussbarbe_ und _Flussbarsch_.
- `*frosch*` findet alle Frösche, aber keine Kröten.

```sql
WHERE Art_deutsch LIKE 'Flussb*'
WHERE Art_deutsch LIKE '*frosch*' AND Kategorie LIKE 'Amphibien*'
```

:::note
Microsoft SQL Server kennt den Stern nicht als Platzhalter. Dort steht das Prozentzeichen (`%`) für eine beliebige Zeichenfolge. Ist die automatische Syntaxkorrektur eingeschaltet, können Sie trotzdem den Stern verwenden.
:::

## Automatische Syntaxkorrektur

Die automatische Syntaxkorrektur ergänzt unter anderem fehlende Tabellenangaben und wandelt den Stern in das passende Platzhalterzeichen um. Sie schalten sie im Menü des SQL-Filters ein oder aus. Ist sie aktiv, steht das im Kopf des Bereichs.

:::warning
Bei Feldern ohne Tabellenangabe (zum Beispiel `GUID_Ort` statt `tblGeometrie.GUID_Ort`) kann die Syntaxkorrektur eine falsche Tabelle zuordnen. Das gilt besonders für Unterabfragen. Prüfen Sie das Ergebnis deshalb auf Plausibilität und schalten Sie die Syntaxkorrektur bei Bedarf aus.
:::

## Filterergebnis sortieren

Sie können das Ergebnis mit einem Klick auf einen Spaltenkopf sortieren. Liefert der Filter mehr Treffer, als die Liste anzeigt, geben Sie die Sortierung besser direkt nach der Bedingung an:

```sql
WHERE Art_deutsch LIKE 'Biber' ORDER BY Ortsbezeichnung
```

Mit `ASC` sortieren Sie aufsteigend, mit `DESC` absteigend:

```sql
WHERE Art_deutsch LIKE 'Biber' ORDER BY Ortsbezeichnung ASC
WHERE Art_deutsch LIKE 'Biber' ORDER BY Ortsbezeichnung DESC
```

Felder vom Datentyp _text_, _ntext_ und _image_ lassen sich nicht direkt sortieren. Fast alle Bemerkungsfelder in MultiBaseCS sind vom Typ _text_. Wandeln Sie den Inhalt zum Sortieren deshalb in eine Zeichenfolge um:

```sql
WHERE Bemerkung LIKE 'in Trupp%' ORDER BY CAST(Bemerkung AS VARCHAR(4000))
```

Weitere Beispiele finden Sie unter [Beispiele für Sortierungen](/desktop/daten-finden-und-bearbeiten/benutzerdefinierter-sql-filter/beispiele-fuer-sortierungen).

## Besonderheiten bei Oracle-Datenbanken

Oracle unterscheidet bei Textvergleichen zwischen Groß- und Kleinschreibung. Wandeln Sie deshalb Suchfeld und Suchbegriff in Groß- oder Kleinbuchstaben um:

```sql
UPPER(tblArten.Art_Deutsch) LIKE UPPER('Biber')
```

## Besonderheiten bei Datumsfeldern

Das Feld _Datum_ enthält neben dem Datum auch die Uhrzeit. Deshalb ist 15.10.2019 10:30:00 größer als 15.10.2019 08:15:00, und Beobachtungen lassen sich nach der Uhrzeit sortieren.

Eine Abfrage mit `Datum = '15.10.2019'` findet nur Datensätze mit dem Wert 15.10.2019 00:00:00. Datensätze vom selben Tag mit Uhrzeit sind größer und werden nicht gefunden. Wenn Sie alle Datensätze eines Tages suchen, schließen Sie die Uhrzeit beim Vergleich aus.

**Datum ohne Uhrzeit abfragen**

Bei SQL Server:

```sql
CONVERT(DATE, tblDaten.Datum) = '15.10.2019'
```

oder

```sql
(tblDaten.Datum >= '15.10.2019' AND tblDaten.Datum < '16.10.2019')
```

Bei Oracle und PostgreSQL:

```sql
TO_CHAR(tblDaten.Datum, 'DD.MM.YYYY') = '15.10.2019'
```

**Datum mit Uhrzeit abfragen**

Bei SQL Server:

```sql
CONVERT(SMALLDATETIME, tblDaten.Datum) = '15.10.2019 10:30'
```

Bei Oracle und PostgreSQL:

```sql
TO_CHAR(tblDaten.Datum, 'DD.MM.YYYY HH24:MI') = '15.10.2019 10:30'
```

## SQL-Statements speichern und wiederverwenden

Aufwendige SQL-Statements müssen Sie nicht jedes Mal neu schreiben. Speichern Sie sie und laden Sie sie bei Bedarf wieder.

### SQL-Statement speichern

1. Klicken Sie im Bereich **Benutzerdefinierter SQL-Filter** auf **Speichern**.

   ![Dialog Benutzerdefiniertes SQL-Statement speichern](/blume-assets/content/assets/screenshots/desktop/sql-speichern.png)

2. Geben Sie im Dialog **Benutzerdefiniertes SQL-Statement speichern** eine treffende **Bezeichnung** und eine **Bemerkung** ein.
3. Klicken Sie auf **Übernehmen**.

### SQL-Statement laden

1. Klicken Sie im Bereich **Benutzerdefinierter SQL-Filter** auf **Laden**. Der Dialog **SQL-Statement laden** öffnet sich.

   ![Dialog SQL-Statement laden mit Suchbegriff](/blume-assets/content/assets/screenshots/desktop/sql-laden.png)

2. Schränken Sie die Liste bei Bedarf über **Suchbegriff** und **Suchfeld** ein.
3. Wählen Sie unter **SQL-Statements**, ob eigene, offizielle oder alle SQL-Statements angezeigt werden. Sind Sie im Umgang mit SQL unsicher, verwenden Sie nur offizielle SQL-Statements. Diese hat in der Regel der Datenbankadministrator geprüft und freigegeben.
4. Mit **SQL-Statement an bestehendes anfügen** ergänzen Sie den Inhalt des Eingabefeldes, statt ihn zu ersetzen.
5. Doppelklicken Sie auf den gewünschten Eintrag oder klicken Sie auf **Übernehmen**. Anschließend führen Sie das SQL-Statement aus.

:::note
Alle gespeicherten SQL-Statements sehen und bearbeiten Sie über **SQL-Statements bearbeiten** im Menü des SQL-Filters.
:::

## Prompt für KI erstellen

Wenn Sie kein SQL schreiben möchten, kann Ihnen eine KI wie ChatGPT, Claude, Copilot oder Gemini die Bedingung formulieren.

1. Wählen Sie im Menü des SQL-Filters **Prompt für KI erstellen**.
2. Beschreiben Sie im Dialog _Prompt-Eingabe_ in eigenen Worten, welche Beobachtungen Sie suchen.
3. Klicken Sie auf **Prompt in Zwischenablage kopieren**.
4. Fügen Sie den Prompt in die KI Ihrer Wahl ein. Die Antwort enthält einen Hinweissatz und die SQL-Bedingung in einem Codeblock.
5. Kopieren Sie die SQL-Bedingung in das Eingabefeld des SQL-Filters, prüfen Sie sie mit **Prüfen** und führen Sie sie aus.

:::warning
Prüfen Sie Vorschläge einer KI immer, bevor Sie sie ausführen, und kontrollieren Sie das Ergebnis auf Plausibilität.
:::

## Syntaxhilfe

Die Auswahlliste _Syntaxhilfe_ im Bereich _Benutzerdefinierter Filter_ bietet fertige Bausteine für häufige Abfragekriterien. Siehe [Syntaxhilfe](/desktop/daten-finden-und-bearbeiten/benutzerdefinierter-sql-filter/syntaxhilfe).
