## Funktionen

Sie können Ausdrücke mit Funktionen verwenden. Dabei können die Funktionen auf die Daten der Ergebnistabelle angewendet oder in Suchbedingungen angegeben werden.

### Voraussetzungen

Sie benötigen die Demo-Daten für das SQL-Tutorial.

Starten Sie das Query Tool SQL Studio als Datenbankadministrator MONA mit dem Kennwort RED und melden Sie sich an die Demo-Datenbankinstanz DEMODB an.

### Erläuterungen

Funktionsbeschreibungen im Referenzhandbuch | Beispiele für diese Funktionsgruppe
Arithmetische Funktion (arithmetic_function) | TRUNC, SIGN, ABS
Trigonometrische Funktion (trigonometric_function) | SIN, ATAN, DEGREES
Stringfunktion (string_function) | SUBSTR, UPPER, MAPCHAR
Datumsfunktion (date_function) | SUBDATE, DAYOFMONTH, DAYNAME
Zeitfunktion (time_function) | ADDTIME, TIMEDIFF, MAKETIME
Extraktion (extraction_function) | DAY, TIMESTAMP, DATE
Spezialfunktion (special_function) | VALUE, LEAST, CASE-Funktion
Konversionsfunktion (conversion_function) | NUM, HEXTOROW, CHAR
Datenbankfunktionsaufruf (dbfunction_call) | Aufruf einer mit CREATE FUNCTION definierten Datenbankfunktion

Die Verwendung der meisten Funktionen ist selbsterklärend. Daher werden hier nur einige wenige ausgewählte Funktionen anhand von Beispielen vorgestellt.

Siehe auch:

SQL-Referenzhandbuch, Ausdruck (expression)

SQL-Referenzhandbuch, Funktion (function_spec)

### Stringfunktionen

Mit Hilfe der Stringfunktionen können Sie die Darstellung von Zeichenketten verändern.

SELECT cno, name & ', ' & firstname name
FROM hotel.customer WHERE cno = 3000

Vor- und Nachname werden miteinander verbunden.

Ergebnis

CNO | NAME
3000 | Porter, Jenny

Siehe auch:

SQL-Referenzhandbuch, Verkettung (concatenation)

SELECT cno, SUBSTR(firstname,1,1) & '. ' & name name
FROM hotel.customer WHERE cno = 3000

Vor- und Nachname werden miteinander verbunden, wobei der Vorname nur verkürzt dargestellt wird.

Ergebnis

CNO | NAME
3000 | J. Porter

Siehe auch:

SQL-Referenzhandbuch, SUBSTR(x,a,b)

### Datumsfunktionen

Datumsfunktionen werden auf Datums- oder Zeitstempelwerte angewendet bzw. liefern als Ergebnis einen Datums- oder Zeitstempelwert.

SELECT rno, arrival, DAYNAME(arrival) arrival_day FROM hotel.reservation WHERE rno < 150

Anzeige des Wochentages der Ankunft

Ergebnis

RNO | ARRIVAL | ARRIVAL_DAY
100 | 2004-11-13 | Saturday
110 | 2004-12-24 | Friday
120 | 2004-11-14 | Sunday
130 | 2005-02-01 | Tuesday
140 | 2004-04-12 | Monday

Siehe auch:

SQL-Referenzhandbuch, DAYNAME/MONTHNAME(t)

### Extraktionen

Mit Extraktionsfunktionen können Sie Teile von Datums-, Zeit- oder Zeitstempelwerten anzeigen lassen oder Datums-, Zeit- oder Zeitstempelwerte bilden.

SELECT name, 675456 number_of_days, DATE(675456) counted_date FROM hotel.city WHERE zip = '12203'

Anzeige, wann 675456 Tage nach dem 31.12.0000 vergangen sind

Ergebnis

NAME | NUMBER_OF_DAYS | COUNTED_DATE
Albany | 675456 | 1850-05-03

Siehe auch:

SQL-Referenzhandbuch, DATE(a)

### Allgemeine CASE-Funktion

Die allgemeine CASE-Funktion untersucht eine Reihe von Suchbedingungen und liefert für jede Suchbedingung ein Ergebnis.

SELECT hno,
CASE
WHEN price IS NULL THEN 'Not yet priced'
WHEN price < 70 THEN 'Very cheap'
WHEN price >= 70 AND price < 100 THEN 'Normal price'
ELSE 'Expensive hotel'
END price_range
FROM hotel.room WHERE hno < 100 AND type = 'single'

Einschätzung der Preisklassen einiger Hotels für Einzelzimmer

Ergebnis

HNO | PRICE_RANGE
10 | Expensive hotel
20 | Normal price
30 | Very cheap
40 | Normal price
50 | Expensive hotel
60 | Expensive hotel
70 | Expensive hotel
80 | Normal price
90 | Normal price

Siehe auch:

SQL-Referenzhandbuch, Allgemeine CASE-Funktion (searched_case_function)

### Einfache CASE-Funktion

Die einfache CASE-Funktion vergleicht einen Ausdruck mit einer Reihe von einfachen Ausdrücken, um jeweils einen Ergebnisausdruck zu bestimmen.

SELECT hno,
CASE price
WHEN NULL THEN 'Not yet priced'
WHEN 70 THEN 'Very cheap'
WHEN 90 THEN 'Cheap'
WHEN 100 THEN 'Normal hotel'
WHEN 115 THEN 'Expensive hotel'
WHEN 135 THEN 'Very expensive hotel'
ELSE 'Not yet in price_range list'
END price_range
FROM hotel.room WHERE hno < 100 AND type = 'single'

Vergleich der Preise einiger Hotels mit einer Bewertungsskala für Einzelzimmerpreise

Ergebnis

HNO | PRICE_RANGE
10 | Very expensive hotel
20 | Very cheap
30 | Not yet in price_range list
40 | Not yet in price_range list
50 | Not yet in price_range list
60 | Not yet in price_range list
70 | Expensive hotel
80 | Cheap
90 | Cheap

Siehe auch:

SQL-Referenzhandbuch, Einfache CASE-Funktion (simple_case_function)

### Datenbankfunktion

Voraussetzung für die Ausführung dieses Beispiels ist das Anlegen der Datenbankfunktion avgprice(zip), wie im Abschnitt Datendefinition ® Datenbankfunktionen beschrieben.

SELECT hno, avgprice(zip) avgprice FROM hotel.hotel WHERE hno = 40

Ergebnis

HNO | AVGPRICE
40 | 87.5

Siehe auch:

SQL-Referenzhandbuch, Datenbankfunktionsaufruf (dbfunction_call)

Weitere Beispiele zur Datenanfrage