448 Stimmen

Unterschied zwischen numerisch, float und dezimal in SQL Server

Was sind die Unterschiede zwischen numeric , float y decimal Datentypen und welche sollten in welchen Situationen verwendet werden?

Welche Art von Finanztransaktion (z. B. für den Bereich Gehalt) wird bevorzugt und warum?

623voto

Iman Punkte 16668

verwenden Sie die Schwimmer o real Datentypen nur wenn die Präzision, die durch dezimal (bis zu 38 Ziffern) ist nicht ausreichend

  • Näherungsweise numerische Datentypen (siehe Tabelle 3.3) speichern nicht die genauen Werte, die angegeben werden. für viele Zahlen; sie speichern eine extrem enge Annäherung an den Wert. ( Technet )

  • Vermeiden Sie die Verwendung von Float- oder Real-Spalten in den Suchbedingungen der WHERE-Klausel, insbesondere die Operatoren = und <>. Es ist am besten, Float- und Real-Spalten auf > oder < Vergleiche zu beschränken. ( Technet )

daher ist die Wahl von Decimal als Datentyp im Allgemeinen die beste Wahl, wenn

  • Ihre Nummer passt hinein. Dezimale Genauigkeit ist 10E38[~ 38 Ziffern]
  • der geringere Speicherplatz (und vielleicht die Rechengeschwindigkeit) von Float für Sie nicht wichtig ist
  • ein exaktes numerisches Verhalten erforderlich ist, z. B. in Finanzanwendungen, bei Operationen mit Rundung oder bei Gleichheitsprüfungen. ( Technet )

  1. Genau Numerische Datentypen Dezimal und numerisch - MSDN
  • numerisch = dezimal (5 bis 17 Bytes)
    • wird in .NET auf Decimal abgebildet
    • beide haben (18, 0) als Standardparameter (Präzision, Skala) im SQL-Server
    • scale = maximale Anzahl der Dezimalstellen, die rechts vom Dezimalpunkt gespeichert werden können.
    • money(8 Byte) und smallmoney(4 Byte) sind ebenfalls Exact Data Type und werden in .NET auf Decimal abgebildet und haben 4 Dezimalpunkte ( MSDN )
  1. Ungefähr Numerische Datentypen Float und Real - MSDN
  • real (4 Byte)
    • wird in .NET auf Single abgebildet
    • Das ISO-Synonym für real ist float(24)
  • Schwimmer (8 Byte)
    • wird in .NET auf Double abgebildet

Exact Numeric Data Types Approximate Numeric Data Types

Hauptquelle : MCTS-Schulungspaket zum Selbststudium (Prüfung 70-433): Microsoft® SQL Server® 2008 Datenbank-Entwicklung - Kapitel 3 - Tabellen, Datentypen und deklarative Datenintegrität Lektion 1 - Auswahl von Datentypen (Richtlinien) - Seite 93

28voto

kmote Punkte 15424

Richtlinien von MSDN: Verwendung von Dezimal-, Float- und Real-Daten

Die Standardeinstellung für die maximale Genauigkeit numerischer und dezimaler Datentypen ist 38. In Transact-SQL ist numeric funktional äquivalent zu decimal Datentyp. Verwenden Sie den Datentyp "Dezimal", um Zahlen mit Dezimalstellen zu speichern. wenn die Datenwerte genau wie angegeben gespeichert werden müssen.

Das Verhalten von float und real folgt der IEEE 754-Spezifikation für approximative numerische Datentypen. Aufgrund der approximativen Natur der float- und real-Datentypen sollten Sie diese Datentypen nicht verwenden, wenn ein exaktes numerisches Verhalten erforderlich ist, wie z.B. in Finanzanwendungen, bei Operationen, die Rundungen beinhalten, oder bei Gleichheitsprüfungen. Verwenden Sie stattdessen die Integer-, Dezimal-, Money- oder Smallmoney-Datentypen. Vermeiden Sie die Verwendung von float oder Real-Spalten in WHERE-Klausel-Suchbedingungen, insbesondere die = und <> Operatoren. Es ist am besten, Float- und Real-Spalten auf > oder < zu begrenzen. Vergleiche zu beschränken.

16voto

Stephan Punkte 5636

Sie unterscheiden sich in der Datentyppriorität

Dezimal y Numerisch sind identisch funktionell aber es gibt noch Vorrang des Datentyps was in manchen Fällen entscheidend sein kann.

SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')

Der resultierende Datentyp ist numerisch denn es braucht Vorrang des Datentyps .

Vollständige Liste der Datentypen nach Rangfolge:

Referenz-Link

12voto

A-K Punkte 16460

Keine vollständige Antwort, aber ein nützlicher Link:

"Ich führe häufig Berechnungen mit dezimalen Werten durch. In einigen Fällen führt die sofortige Umwandlung von Dezimalwerten in Fließkommazahlen vor den Berechnungen zu einer besseren Genauigkeit. "

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx

8voto

Somnath Muluk Punkte 51007

Schwimmer ist der Datentyp Approximate-number, was bedeutet, dass nicht alle Werte im Datentypbereich exakt dargestellt werden können.

Dezimal/Numerisch ist ein Datentyp mit fester Genauigkeit, was bedeutet, dass alle Werte im Datentypbereich genau mit Genauigkeit und Skala dargestellt werden können. Sie können Dezimalzahlen verwenden, um Geld zu sparen.

Die Konvertierung von Decimal oder Numeric in Float kann zu einem gewissen Präzisionsverlust führen. Bei den Datentypen Decimal oder Numeric betrachtet SQL Server jede spezifische Kombination von Genauigkeit und Skala als einen anderen Datentyp. DECIMAL(2,2) und DECIMAL(2,4) sind unterschiedliche Datentypen. Das bedeutet, dass 11,22 und 11,2222 unterschiedliche Typen sind, obwohl dies bei float nicht der Fall ist. Für FLOAT(6) sind 11.22 und 11.2222 die gleichen Datentypen.

Sie können auch Folgendes verwenden Geld Datentyp, um Geld zu sparen. Dies ist ein nativer Datentyp mit 4-stelliger Genauigkeit für Geld. Die meisten Experten bevorzugen diesen Datentyp zum Sparen von Geld.

Referenz 1 2 3

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X