Grundlagen des SQL DECIMAL-Datentyps
Daniel Hayes
Full-Stack Engineer · Leapcell

Key Takeaways
- SQL DECIMAL speichert exakte numerische Werte mit definierter Genauigkeit und Skalierung.
- DECIMAL wird für Finanzdaten bevorzugt, um Rundungsfehler zu vermeiden.
- Die richtige Auswahl von Genauigkeit und Skalierung gewährleistet Datengenauigkeit und -integrität.
In SQL ist der Datentyp DECIMAL
entscheidend für die Speicherung exakter numerischer Werte, insbesondere wenn Präzision von größter Bedeutung ist. Dies gilt insbesondere für Bereiche wie Finanzen, wissenschaftliche Messungen und Bestandsverwaltung, in denen Rundungsfehler zu erheblichen Diskrepanzen führen können.
Was ist der DECIMAL-Datentyp?
Der Datentyp DECIMAL
(oder NUMERIC
) repräsentiert Festkommazahlen mit benutzerdefinierter Genauigkeit und Skalierung. Diese beiden Parameter bestimmen die Gesamtzahl der Ziffern und die Anzahl der Ziffern nach dem Dezimalpunkt.
- Genauigkeit (p): Gesamtzahl der Ziffern, die gespeichert werden können, sowohl links als auch rechts vom Dezimalpunkt.
- Skalierung (s): Anzahl der Ziffern, die rechts vom Dezimalpunkt gespeichert werden können.
Beispielsweise ermöglicht DECIMAL(6,2)
Zahlen bis zu 9999,99 und bietet Platz für vier Ziffern vor und zwei Ziffern nach dem Dezimalpunkt.
Syntax und Speicherung
Die allgemeine Syntax zum Definieren einer DECIMAL
-Spalte lautet:
DECIMAL(p, s)
p
: Genauigkeit, im Bereich von 1 bis 38 in SQL Server und bis zu 65 in MySQL.s
: Skalierung, die kleiner oder gleichp
sein muss.
Die Speicheranforderungen variieren basierend auf der Genauigkeit:
Genauigkeitsbereich | Speicher (Bytes) |
---|---|
1–9 | 5 |
10–19 | 9 |
20–28 | 13 |
29–38 | 17 |
Hinweis: Diese Speichergrößen sind spezifisch für SQL Server und können in anderen Datenbanksystemen abweichen.
Praktische Beispiele
Erstellen einer Tabelle mit DECIMAL-Spalten:
CREATE TABLE Transactions ( TransactionID INT PRIMARY KEY, Amount DECIMAL(10, 2) NOT NULL );
In diesem Beispiel kann die Spalte Amount
Werte bis zu 99999999,99 speichern, was für Finanztransaktionen geeignet ist.
Daten einfügen:
INSERT INTO Transactions (TransactionID, Amount) VALUES (1, 12345.67);
Überlauf behandeln:
Der Versuch, einen Wert einzufügen, der die definierte Genauigkeit überschreitet, führt zu einem Fehler:
-- Dies verursacht einen Fehler, wenn Amount als DECIMAL(5,2) definiert ist INSERT INTO Transactions (TransactionID, Amount) VALUES (2, 123456.78);
Um dies zu beheben, passen Sie die Genauigkeit an:
ALTER TABLE Transactions MODIFY Amount DECIMAL(7, 2);
DECIMAL vs. FLOAT/DOUBLE
Während DECIMAL
eine exakte Genauigkeit bietet, sind FLOAT
und DOUBLE
approximative Datentypen. Sie eignen sich für wissenschaftliche Berechnungen, bei denen ein geringfügiger Präzisionsverlust akzeptabel ist. Für Finanzdaten wird jedoch DECIMAL
bevorzugt, um Rundungsfehler zu vermeiden.
Bewährte Methoden
- Verwenden Sie
DECIMAL
für Finanzdaten: Stellt die Exaktheit bei monetären Berechnungen sicher. - Definieren Sie eine angemessene Genauigkeit und Skalierung: Weisen Sie ausreichend Ziffern zu, um erwartete Werte aufzunehmen.
- Beachten Sie die Speicherimplikationen: Eine höhere Genauigkeit erfordert mehr Speicherplatz.
- Validieren Sie Eingabedaten: Stellen Sie sicher, dass die eingefügten Werte die definierte Genauigkeit und Skalierung nicht überschreiten, um Fehler zu vermeiden.
Fazit
Der Datentyp DECIMAL
ist für Szenarien unerlässlich, die eine hohe Präzision und exakte numerische Darstellung erfordern. Durch das Verständnis und die angemessene Anwendung von Genauigkeit und Skalierung können Entwickler die Datenintegrität und -genauigkeit in ihren SQL-Datenbanken sicherstellen.
FAQs
Verwenden Sie DECIMAL für Finanz- oder präzise numerische Daten, um Rundungsfehler zu vermeiden.
Die Datenbank gibt einen Fehler zurück. Passen Sie die Genauigkeit oder Skalierung an, wenn größere Werte erforderlich sind.
Eine höhere Genauigkeit erhöht die Speichergröße. Wählen Sie Werte, die Ihren Anforderungen entsprechen.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Backend-Projekten.
Leapcell ist die Serverlose Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Mehrsprachige Unterstützung
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- zahlen Sie nur für die Nutzung – keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Reaktionszeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollständig automatisierte CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für verwertbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein Betriebsaufwand – konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ