Appearance
Kapitel 12: MySQL Funktionen ⭐
MySQL bietet viele eingebaute Funktionen, um Daten zu verarbeiten und zu transformieren.
12.1 String-Funktionen (Häufig verwendet) ⭐
1. CONCAT() - Zeichenketten verknüpfen
sql
-- Vorname und Nachname zusammenfügen
SELECT CONCAT(vorname, ' ', nachname) AS voller_name
FROM users;
-- Ergebnis: "Max Mustermann"2. LENGTH() - Länge der Zeichenkette (in Bytes)
sql
-- Länge des Benutzernamens berechnen
SELECT username, LENGTH(username) AS name_laenge
FROM users;
-- Ergebnis: username="max", name_laenge=3Hinweis: Bei UTF-8 Zeichen (wie Deutsch Umlaute) liefert LENGTH() die Bytezahl (nicht Zeichenzahl)!
- Für Zeichenzahl:
CHAR_LENGTH()verwenden!
sql
SELECT
username,
LENGTH(username) AS byte_laenge, -- Bytezahl
CHAR_LENGTH(username) AS zeichen_laenge -- Zeichenzahl
FROM users;3. SUBSTR() / SUBSTRING() - Teilstring extrahieren
sql
-- Erste 3 Buchstaben des Benutzernamens
SELECT SUBSTR(username, 1, 3) AS kurzname
FROM users;
-- Syntax: SUBSTR(string, startposition, länge)
-- ACHTUNG: Position beginnt bei 1 (nicht 0!)4. UPPER() / LOWER() - Groß-/Kleinschreibung
sql
-- Benutzernamen in Großbuchstaben umwandeln
SELECT UPPER(username) AS name_gross
FROM users;
-- Benutzernamen in Kleinbuchstaben umwandeln
SELECT LOWER(username) AS name_klein
FROM users;5. TRIM() - Leerzeichen entfernen
sql
-- Führende und abschließende Leerzeichen entfernen
SELECT TRIM(' Max ') AS bereinigt; -- Ergebnis: "Max"
-- Nur führende (LTRIM) oder nur abschließende (RTRIM)
SELECT LTRIM(' Max') AS links_bereinigt; -- "Max"
SELECT RTRIM('Max ') AS rechts_bereinigt; -- "Max"6. REPLACE() - Zeichenkette ersetzen
sql
-- "@"-Symbole in E-Mail-Adressen durch "[at]" ersetzen
SELECT REPLACE(email, '@', '[at]') AS email_versteckt
FROM users;
-- Ergebnis: "max[at]email.de"12.2 Datums- und Zeitfunktionen ⭐
1. NOW() - Aktuelles Datum und Uhrzeit
sql
SELECT NOW(); -- Ergebnis: "2024-01-15 14:30:00"2. CURDATE() / CURRENT_DATE() - Aktuelles Datum
sql
SELECT CURDATE(); -- Ergebnis: "2024-01-15"3. CURTIME() / CURRENT_TIME() - Aktuelle Uhrzeit
sql
SELECT CURTIME(); -- Ergebnis: "14:30:00"4. DATE() - Datumsteil extrahieren
sql
-- Nur das Datum aus einem DATETIME-Feld extrahieren
SELECT DATE(erstellt_am) AS datum_nur
FROM users;
-- Ergebnis: "2024-01-15" (ohne Uhrzeit)5. YEAR() / MONTH() / DAY() - Jahr/Monat/Tag extrahieren
sql
-- Jahr aus dem Erstellungsdatum extrahieren
SELECT
YEAR(erstellt_am) AS jahr,
MONTH(erstellt_am) AS monat,
DAY(erstellt_am) AS tag
FROM users;6. DATEDIFF() - Differenz zwischen zwei Daten berechnen
sql
-- Anzahl der Tage zwischen zwei Daten berechnen
SELECT DATEDIFF('2024-12-31', '2024-01-01') AS tage_differenz;
-- Ergebnis: 3647. DATE_ADD() / DATE_SUB() - Datum addieren/subtrahieren
sql
-- 30 Tage zum aktuellen Datum addieren
SELECT DATE_ADD(CURDATE(), INTERVAL 30 DAY) AS in_30_tagen;
-- 1 Monat vom aktuellen Datum abziehen
SELECT DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AS vor_1_monat;12.3 Mathematische Funktionen
1. ROUND() - Runden
sql
-- Auf 2 Nachkommastellen runden
SELECT ROUND(19.9876, 2) AS gerundet; -- Ergebnis: 19.99
-- Ohne Dezimalstellen (ganzzahlig runden)
SELECT ROUND(19.49) AS gerundet; -- Ergebnis: 192. CEIL() / CEILING() - Aufrunden
sql
SELECT CEIL(19.01); -- Ergebnis: 20 (immer aufrunden!)3. FLOOR() - Abrunden
sql
SELECT FLOOR(19.99); -- Ergebnis: 19 (immer abrunden!)4. ABS() - Absolutwert
sql
SELECT ABS(-42); -- Ergebnis: 42
SELECT ABS(42); -- Ergebnis: 425. MOD() / % - Restwert (Modulo)
sql
SELECT MOD(10, 3); -- Ergebnis: 1 (10 durch 3 = 3 Rest 1)
SELECT 10 % 3; -- Gleiches Ergebnis: 112.4 Bedingte Funktionen (IF, CASE)
1. IF() - Einfache Bedingung
sql
-- Syntax: IF(bedingung, wert_wenn_wahr, wert_wenn_falsch)
SELECT
username,
IF(ist_aktiv = 1, 'Aktiv', 'Inaktiv') AS status_text
FROM users;Ergebnis:
+----------+--------------+
| username | status_text |
+----------+--------------+
| max | Aktiv |
| lisa | Inaktiv |
+----------+--------------+2. CASE - Komplexe Bedingungen (wie if-else if-else)
sql
SELECT
produkt_name,
preis,
CASE
WHEN preis < 20 THEN 'Günstig'
WHEN preis BETWEEN 20 AND 100 THEN 'Mittel'
ELSE 'Teuer'
END AS preis_kategorie
FROM products;Ergebnis:
+----------------+-------+------------------+
| produkt_name | preis | preis_kategorie |
+----------------+-------+------------------+
| T-Shirt | 19.99 | Günstig |
| Jeans | 59.99 | Mittel |
| Sneaker | 89.99 | Mittel |
| Luxus-Uhr | 999.99| Teuer |
+----------------+-------+------------------+12.5 Praxisbeispiel: Funktionen anwenden
Szenario: Eine Online-Shop-Datenbank analysieren.
Schritt 1: Testdaten vorbereiten
sql
USE shop_db;
-- Tabelle "orders" hat bereits Daten von früher
-- Neue Felder hinzufügen für Übungen
ALTER TABLE orders
ADD COLUMN bestell_datum DATETIME DEFAULT CURRENT_TIMESTAMP;Schritt 2: Verschiedene Funktionen üben
1. Vollständige Adresse zusammenfügen (CONCAT):
sql
SELECT
CONCAT(vorname, ' ', nachname) AS voller_name,
email
FROM users;2. Benutzer registriert in diesem Jahr (YEAR, CURDATE):
sql
SELECT username, erstellt_am
FROM users
WHERE YEAR(erstellt_am) = YEAR(CURDATE());4. Preiskategorien erstellen (CASE):
sql
SELECT
produkt_name,
preis,
CASE
WHEN preis < 20 THEN 'Günstig'
WHEN preis <= 100 THEN 'Mittel'
ELSE 'Teuer'
END AS kategorie
FROM products
ORDER BY preis;Häufige Fehler für Einsteiger
Fehler 1: String-Indizes verwechseln (1 vs 0)
sql
-- ❌ Falsch: Denkt, Position beginnt bei 0 (wie in vielen Programmiersprachen)
SELECT SUBSTR(username, 0, 3) FROM users; -- Fehler oder leeres Ergebnis!
-- ✅ Richtig: Position beginnt bei 1
SELECT SUBSTR(username, 1, 3) FROM users;Fehler 2: LENGTH vs CHAR_LENGTH verwechseln
sql
-- ❌ Falsch: LENGTH() zählt Bytes (bei Umlauten falsch!)
SELECT LENGTH('Müller'); -- Ergebnis: 7 (Byte) statt 6 (Zeichen)
-- ✅ Richtig: CHAR_LENGTH() zählt Zeichen
SELECT CHAR_LENGTH('Müller'); -- Ergebnis: 6 (Zeichen)Fehler 3: DATEDIFF falsch verwenden
sql
-- ❌ Falsch: Reihenfolge vertauscht
SELECT DATEDIFF('2024-01-01', '2024-12-31'); -- Ergebnis: -364 (negativ!)
-- ✅ Richtig: größeres Datum zuerst
SELECT DATEDIFF('2024-12-31', '2024-01-01'); -- Ergebnis: 364Zusammenfassung
In diesem Kapitel hast du gelernt:
- ✅ String-Funktionen (
CONCAT,LENGTH,SUBSTR,UPPER, etc.) - ✅ Datumsfunktionen (
NOW,DATE,YEAR,DATEDIFF, etc.) - ✅ Mathematische Funktionen (
ROUND,CEIL,FLOOR,ABS) - ✅ Bedingte Funktionen (
IF,CASE) - ✅ Praxisbeispiele für Online-Shop
Übungen
- Praxis: Erstelle eine Tabelle
employeesmit Feldernid,vorname,nachname,gehalt - CONCAT: Füge Vor- und Nachnamen zu "Voller Name" zusammen
- YEAR: Finde alle Mitarbeiter, die 2023 eingestellt wurden
- ROUND: Runde alle Gehälter auf 2 Nachkommastellen
- CASE: Erstelle Gehaltskategorien ("Niedrig", "Mittel", "Hoch")
Nächstes Kapitel
Im nächsten Kapitel beginnen wir mit Praxisprojekten - wende dein Wissen in echten Szenarien an!
