# Datentypen und Operatoren

Datentypen definieren, was ein Skriptwert ist. Operatoren definieren, was du mit diesem Wert machst.

{% hint style="info" %}
Verwechsle **Felder** nicht mit **Datentypen**. Ein Feld fügst du im **Builder-Modus** hinzu, zum Beispiel **Text**, **Zahl** oder **Datum und Uhrzeit**. Ein Datentyp ist der Wert, den dein Skript liest oder zurückgibt, zum Beispiel Text, Number, Date, Datetime, Record oder Array.
{% endhint %}

Für ausführlichere Erklärungen und Beispiele öffne [Operatoren](/ninox-scripting/de/automate-your-workflows/explore-core-scripting-elements/operators.md) und [Zentrale Elemente des Skriptings kennenlernen](/ninox-scripting/de/automate-your-workflows/explore-core-scripting-elements.md).

Springe zu: [Datentypen](#datentypen) · [Operatoren](#operatoren) · [Konvertierungen](#konvertierungen) · [Häufige Stolperfallen](#häufige-stolperfallen)

## **Datentypen**

Datentypen beschreiben, was ein Ausdruck zurückgibt oder eine Variable speichert. Wenn du den Typ kennst, wählst du den passenden Operator und die richtige Konvertierung.

### **Ordne gängige Feldtypen Skriptwerten zu**

Diese Zuordnungen helfen dir, Builder-Begriffe und Begriffe aus dem Skripting zu trennen:

* **Text**- und **Mehrzeiliger Text**-Felder geben **Text** zurück.
* **Zahl**-Felder geben **Number** zurück.
* **Ja/nein**-Felder geben **Yes/No** zurück.
* **Datum**-Felder geben **Date** zurück.
* **Datum und Uhrzeit**-Felder geben **Datetime** zurück.
* **Uhrzeit**-Felder geben **Time** zurück.
* **Termin**-Felder geben **Appointment** zurück.
* **Verknüpfungsfelder** geben **Record**-Referenzen oder Listen von Datensätzen zurück.
* **File**-, **Location**- und **User**-Felder geben spezialisierte Werte derselben Art zurück.
* **Ansichten**, **Diagramme**, **Steuerelemente**, **Layouts** und **dynamische** Elemente sind Builder-Komponenten, keine Datentypen im Skripting.

### **Starte mit den Grundtypen**

Die meisten Skripte nutzen zuerst diese Typen:

* **Text** speichert Bezeichnungen, Nachrichten und andere Wörter, zum Beispiel `"Hello"` oder `---Hello {'First name'}!---`.
* **Number** speichert Werte, mit denen du rechnest, zum Beispiel `125` oder `19.95`.
* **Yes/No** speichert `true` oder `false`. Vergleichsoperatoren geben diesen Typ zurück.

### **Nutze Datums- und Zeittypen für zeitbasierte Logik**

Nutze je nach Anwendungsfall unterschiedliche zeitbezogene Typen:

* **Date** speichert ein Kalenderdatum ohne Uhrzeit, zum Beispiel `today()` oder `date(2026, 3, 23)`.
* **Time** speichert eine Uhrzeit, zum Beispiel `time(14, 30)`.
* **Datetime** speichert lokales Datum und Uhrzeit zusammen, zum Beispiel `datetime(2026, 3, 23, 14, 30)`.
* **Timestamp** speichert einen zeitbasierten Wert als Zeitstempel, zum Beispiel `timestamp(now())`.
* **Appointment** speichert Start und Ende zusammen, zum Beispiel `appointment(now(), timeinterval(1, "hours"))`.
* **Duration** speichert eine Zeitspanne, zum Beispiel `duration(End, Start)`.

### **Nutze strukturierte Typen für Datensätze und Daten**

Diese Typen helfen dir, wenn du über einfache Werte hinausgehst:

* **Record** speichert eine Referenz auf einen Datensatz, zum Beispiel `first(select Customers)`. Nutze `.` für den Zugriff auf seine Felder.
* **Array** speichert eine Liste von Werten, zum Beispiel `[1, 2, 3]` oder `select Invoices`.
* **JSON** speichert strukturierte Schlüssel-Wert-Daten, zum Beispiel `parseJSON("{\"status\":\"Open\"}")`.
* **File** speichert eine Dateireferenz, zum Beispiel `file(Attachment)`.
* **Location** speichert einen Ort mit Koordinaten, zum Beispiel `location("Office", 52.52, 13.405)`.
* **User** speichert einen Nutzer im Arbeitsbereich, zum Beispiel `user()`.

## **Operatoren**

Operatoren helfen dir beim Zuweisen, Rechnen, Vergleichen und Zugreifen auf Werte. Wähle sie nach der Aufgabe aus.

### **Werte zuweisen und lesen**

Nutze diese Operatoren, um Werte zu speichern und Daten zu lesen:

* `:=` weist einer Variable oder einem Feld einen Wert zu, zum Beispiel `let total := Price * Quantity`.
* `.` greift auf ein Feld in einem Datensatz oder einen Wert in einem Objekt zu, zum Beispiel `customer.Name`.
* `;` beendet eine Anweisung, zum Beispiel `let total := 100;`.

### **Mit arithmetischen Operatoren rechnen**

Nutze arithmetische Operatoren für Summen, Mengen, Prozente und ähnliche Berechnungen:

* `+` addiert Zahlen und verbindet auch Text, zum Beispiel `1 + 2` oder `"Hello " + 'First name'`.
* `-` subtrahiert eine Zahl von einer anderen, zum Beispiel `Net - Discount`.
* `*` multipliziert numerische Werte, zum Beispiel `Price * Quantity`.
* `/` dividiert eine Zahl durch eine andere, zum Beispiel `Total / 4`.
* `%` gibt den Rest nach einer Division zurück, zum Beispiel `13 % 5`.
* `()` ändert die Reihenfolge der Berechnung, zum Beispiel `(1 + 2) * 3`.

### **Werte in Bedingungen vergleichen**

Nutze Vergleichsoperatoren, wenn dein Skript entscheiden soll, was als Nächstes passiert:

* `=` prüft, ob zwei Werte gleich sind, zum Beispiel `Status = "Open"`.
* `!=` prüft, ob zwei Werte unterschiedlich sind, zum Beispiel `Status != "Closed"`.
* `>` und `>=` prüfen, ob der linke Wert größer ist.
* `<` und `<=` prüfen, ob der linke Wert kleiner ist.
* `like` prüft, ob ein Text in einem anderen Text vorkommt, zum Beispiel `"Hello" like "ell"`.

### **Bedingungen kombinieren**

Nutze logische Operatoren, wenn eine einzelne Prüfung nicht ausreicht:

* `and` erfordert, dass beide Bedingungen wahr sind, zum Beispiel `Status = "Open" and Total > 100`.
* `or` erfordert, dass mindestens eine Bedingung wahr ist, zum Beispiel `Status = "Open" or Status = "Pending"`.

### **Text und Feldnamen korrekt schreiben**

Nutze die richtige Syntax für Text und Namen:

* `""` kennzeichnet einen Textwert, zum Beispiel `"Open"`.
* `---` kennzeichnet einen längeren Textwert, zum Beispiel `---Hello {'First name'}!---`.
* `''` umschließt Feld- oder Tabellennamen mit Leerzeichen oder Sonderzeichen, zum Beispiel `'First name'`.

## **Konvertierungen**

Nutze Konvertierungen, wenn ein Wert den richtigen Inhalt, aber den falschen Typ hat.

Diese Funktionen nutzt du am häufigsten:

* `text(any)` konvertiert einen Wert in lesbaren Text. Nutze das für Nachrichten wie `"Order " + text(Number)`.
* `number(any)` konvertiert einen Wert in eine Zahl. Das hilft, wenn importierte Werte als Text ankommen.
* `date(any)` konvertiert einen Wert in ein Datum und entfernt bei Bedarf den Zeitanteil.
* `datetime(...)` erstellt oder konvertiert einen lokalen Datums- und Uhrzeitwert.
* `timestamp(any)` konvertiert einen zeitbasierten Wert in einen Zeitstempel.
* `parseJSON(string)` konvertiert JSON-Text in ein JSON-Objekt.
* `formatJSON(JSON)` konvertiert ein JSON-Objekt in JSON-Text.

## **Häufige Stolperfallen**

Diese Fehler kommen besonders oft vor:

* Nutze `:=` für Zuweisungen. Nutze `=` für Vergleiche. Beides wird leicht verwechselt.
* Nutze einfache Anführungszeichen für Feld- oder Tabellennamen wie `'First name'`. Nutze doppelte Anführungszeichen für Text wie `"Hello"`.
* `+` kann Zahlen addieren oder Text verbinden. Wenn ein Teil noch kein Text ist, konvertiere ihn zuerst mit `text()`, zum Beispiel `"Order " + text(Number)`.
* `like` prüft, ob ein Text in einem anderen Text vorkommt. Nutze `=`, wenn Werte exakt übereinstimmen müssen.
* Der Punktoperator braucht links einen Datensatz oder ein Objekt, zum Beispiel `let customer := first(select Customers); customer.Name`. Wenn links kein Datensatz steht, kann Ninox das Feld nicht lesen.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ninox.com/ninox-scripting/de/functions-and-script-library/data-types-and-operators.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
