Was ist der beste Datentyp für Prozentwerte von 0,00% bis 100,00%?Geeigneter Datentyp für Prozentwerte?
Antwort
Wenn Sie für Ihre Prozentsätze zwei Dezimalstellen angeben, hängt der verwendete Datentyp davon ab, wie Sie Ihre Prozentsätze speichern möchten. Wenn Sie ihren Bruchteiläquivalent speichern (z. B. 100,00% als 1,0000 gespeichert), würde ich die Daten in einem decimal(5,4)
Datentyp mit einer CHECK
Einschränkung speichern, die sicherstellt, dass die Werte niemals 1,0000 überschreiten (unter der Annahme, dass die Begrenzung) und nie gehen unter 0 (unter der Annahme, dass es sich um den Boden handelt). Wenn Sie ihren Nennwert speichern möchten (z. B. 100,00% wird als 100,00 gespeichert), sollten Sie decimal(5,2)
mit einer entsprechenden CHECK
-Einschränkung verwenden. In Kombination mit einem guten Spaltennamen wird anderen Entwicklern klar, was die Daten sind und wie die Daten in der Spalte gespeichert sind.
Sollte es nicht "dezimal (5,2)" sein, wo 2 die Anzahl der Stellen nach dem Dezimaltrennzeichen bezeichnet? –
@BorisCallens - Ich kann nicht glauben, dass ich all diese Jahre vermisst habe. Ja, das ist ein Tippfehler. 'decimal (5,2)' ist das, was mit einer Prüfbedingung eingefangen werden soll. – Thomas
Ich bin froh zu helfen :) –
Wenn 2 Dezimalstellen Ihre Genauigkeitsgrenze ist, würde ein "smallint" dies auf kleinstem Raum (2 Bytes) verarbeiten. Sie speichern den Prozentsatz multipliziert mit 100.
EDIT: decimal Typ ist wahrscheinlich eine bessere Übereinstimmung. Dann müssen Sie nicht manuell skalieren. Es dauert 5 Bytes pro Wert.
Verwenden Sie numerische (n, n), wo n genug Auflösung hat, um auf 1,00 zu runden. Zum Beispiel:
declare @discount numeric(9,9)
, @quantity int
select @discount = 0.999999999
, @quantity = 10000
select convert(money, @discount * @quantity)
Diese Frage hat vor mehr als drei Jahren eine ziemlich hohe angenommene Antwort. Wenn Sie nach alten Fragen suchen, die Sie beantworten können, finden Sie hier: http://stackoverflow.com/unanswered – valverij
- Halten als
decimal
. - Fügen Sie Prüfbedingungen hinzu, wenn Sie den Bereich einschränken möchten (z. B. zwischen 0 und 100%; in einigen Fällen kann es Gründe geben, über 100% oder möglicherweise sogar in die Negative zu gehen).
- Behandle Wert 1 als 100%, 0,5 als 50% usw. Dadurch können alle mathematischen Operationen wie erwartet funktionieren (d. H. Im Gegensatz zur Verwendung des Werts 100 als 100%).
- Ändern Sie die Genauigkeit und Skalierung wie erforderlich (dies sind die beiden Werte in Klammern
columnName decimal(precision, scale)
. Präzision sagt die Gesamtzahl der Ziffern, die in der Zahl gehalten werden können, Skala sagt, wie viele davon sind nach der Dezimalstelle, sodecimal(3,2)
ist ein Zahl, die als#.##
dargestellt werden kann;decimal(5,3)
würde##.###
sein decimal
undnumeric
wesentlichen die gleiche Sache sind jedochdecimal
ist ANSI-konform, so verwenden Sie immer, dass nichts anderes gesagt, es sei denn (zB durch Ihre Firma Coding-Standards)
Beispielszenarien
- Für Ihren Fall (0,00% bis 100,00%) möchten Sie
decimal(5,4)
. - Für den häufigsten Fall (0% bis 100%) möchten Sie
decimal(3,2)
. - In beiden der oben würde die Kontrollzwänge gleich sein
Beispiel:
if object_id('Demo') is null
create table Demo
(
Id bigint not null identity(1,1) constraint pk_Demo primary key
, Name nvarchar(256) not null constraint uk_Demo unique
, SomePercentValue decimal(3,2) constraint chk_Demo_SomePercentValue check (SomePercentValue between 0 and 1)
, SomePrecisionPercentValue decimal(5,2) constraint chk_Demo_SomePrecisionPercentValue check (SomePrecisionPercentValue between 0 and 1)
)
Weiterführende Literatur:
- Dezimalskala & Präzision: http://msdn.microsoft.com/en-us/library/aa258832%28SQL.80%29.aspx
0 to 1
vs0 to 100
: C#: Storing percentages, 50 or 0.50?- Dezimal vs Numerisch: Is there any difference between DECIMAL and NUMERIC in SQL Server?
ich mit Thomas zustimmen und ich würde die DECIMAL (5,4) Lösung zumindest für WPF-Anwendungen zur Verfügung.
Werfen Sie einen Blick auf das numerische Format String MSDN wissen, warum: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
Der Prozentsatz („P“) Formatspezifizierer multipliziert eine Zahl mit 100 und wandelt es in eine Zeichenfolge, die einen Prozentsatz darstellt.
Dann würden Sie in der Lage sein, diesen Code in XAML zu verwenden:
DataFormatString="{}{0:P}"
- 1. Format Dezimal für Prozentwerte?
- 2. Was ist ein geeigneter Datentyp zum Speichern einer Zeitzone?
- 3. likert plot zeigt Prozentwerte
- 4. Geeigneter Strukturtyp für Unmarshal von Geojson
- 5. Geeigneter Datenfeldtyp für wahren/falschen Wert?
- 6. Kein geeigneter Konstruktor gefunden
- 7. Anzeigen von Daten als Prozentwerte für Kreisdiagramm. (Verwenden von RDLC)
- 8. Oracle-Datentyp für Textdatei?
- 9. Anmerkung für spezifischen Datentyp
- 10. Auswahl geeigneter Wert von Attribut
- 11. C# Excel-Prozentwerte in Dezimalzahlen konvertiert
- 12. Prozentwerte in Excel mit POI-API anzeigen
- 13. Fehler: kein geeigneter Standardkonstruktor verfügbar
- 14. Kein geeigneter Treiber gefunden (SQLite)
- 15. Ist SignalR ein geeigneter Ersatz für jQuery Ajax (oder ähnlich)
- 16. java.sql.SQLException: Kein geeigneter Treiber für jdbc gefunden: sqlite: db/Fakturi.sqlite
- 17. Was ist ein geeigneter Content-Type-Header für JavaScript-Dateien?
- 18. kein geeigneter Konstruktor für FileScanner gefunden (keine Argumente)
- 19. Ist 502 ein geeigneter Statuscode für einen Datenbankfehler?
- 20. Fehler "kein geeigneter Konstruktor für FirebaseListAdapter()" in Android
- 21. JSON-Datentyp für relationale DATENBANK
- 22. TinyInt als Datentyp für enum
- 23. Java-Datentyp für Oracle RAW
- 24. Datentyp für Währung mit Mongoid
- 25. Exakter dezimaler Datentyp für C++?
- 26. Benutzerdefinierter Datentyp (MPI_Datatype-Datentyp)?
- 27. Die Wahl geeigneter Hintergrund/Vordergrundfarbe mit PHP
- 28. Kein geeigneter URL-Anfrage-Handler gefunden?
- 29. Java DB: Kein geeigneter Treiber gefunden
- 30. Welche Art der Programmierung ist geeigneter?
Auch dieses Ergebniss zu finden: http://stackoverflow.com/questions/1602318/what-should-be-the -best-weg-zu-speichern-ein-Prozent-Wert-in-sql-server – User