Typ: DECFLOAT

Gäller för:kryssa i ja Databricks SQL-kryss markerad ja Databricks Runtime 19 och uppåt

Representerar flyttal på basis 10 med 16 eller 34 signifikanta siffror och ingen fast skala.

Important

DECFLOAT är i Beta. En workspace-administratör måste aktivera DECFLOAT-datatypen i Previews.

Syntax

DECFLOAT [ ( p ) ]
  • p: Det maximala antalet signifikanta decimalsiffror. Stödda värden är 16 och 34. Standard är 34.

DECFLOAT accepterar inte ett skalargument. Varje värde har sin egen exponent.

Limits

Property DECFLOAT(16) DECFLOAT(34)
Betydande siffror Upp till 16 Upp till 34
Minsta positiva icke-noll värde 1E-398 1E-6176
Största positiva ändliga värde (10^16 - 1) × 10^369 (10^34 - 1) × 10^6111

Samma gränser gäller för negativa tal. Båda typerna stödjer också oändlighet och NaN.

Literals

Använd CAST med en sträng eller stödd numerisk värde. Strängar kan också innehålla NaN, Inf, eller Infinity.

Notes

DECFLOAT representerar decimalvärden såsom 0.1 exakt. Värden som överstiger precisionen kan avrundas utan fel, inklusive med TRY_CAST. Kasta decimaltext direkt. Att konvertera genom FLOAT kan DOUBLE tappa precision.

Strängutgång bevarar efterföljande nollor, så lika värden som 1.5 och 1.50 kan ge olika strängar (+15E-1 och +150E-2). Kast från DECFLOAT för att DECIMAL runda halvvägs uppåt, oberoende av DECFLOAT_ROUNDING_MODE.

  • Aritmetik bevarar precision när båda operanden har samma DECFLOAT-typ. Blandade precisioner eller operationer med andra stödda numeriska typer använder DECFLOAT(34).
  • SUM och AVG returnera DECFLOAT(34). MIN och MAX bevara inmatningsprecisionen.
  • SQRT, ABS, och ROUND acceptera DECFLOAT direkt.

DECFLOAT_ROUNDING_MODEkontrollerar avrundning för kast till DECFLOAT, , , , , , , SUMoch AVG. SQRT/*-+ Standardvärdet är ROUND_HALF_EVEN. Andra stödda lägen är ROUND_HALF_UP, ROUND_CEILING, , ROUND_FLOORoch ROUND_DOWN. DIVtar bort den bråkdelade delen av resultatet, oavsett .DECFLOAT_ROUNDING_MODE ROUND, BROUND, och TRUNCATE använder sina egna avrundningsregler.

> SET DECFLOAT_ROUNDING_MODE = ROUND_FLOOR;
> SELECT CURRENT_DECFLOAT_ROUNDING_MODE();
  ROUND_FLOOR

Med standardavrundningsläget ger överflödet oändlighet och division med noll ger oändlighet eller NaN. ANSI-läget ändrar inte dessa resultat. Stödda TRY_* aritmetiska funktioner bevarar oändligheten och NaN istället för att returnera NULL. NaN jämför lika och sorterar efter positiv oändlighet. Positiv och negativ noll jämför lika. Använd ISNAN för att upptäcka NaN.

Examples

> SELECT CAST('1.5' AS DECFLOAT(34)) + CAST('2.5' AS DECFLOAT(34)) AS total;
  +40E-1

> SELECT CAST(CAST('1.23E+100' AS DECFLOAT(34)) AS STRING);
  +123E+98

> SELECT typeof(CAST('1' AS DECFLOAT(16)) + 1);
  decfloat(34)

Limitations

  • Rest- och bitvisa operationer stöds inte.
  • Funktioner som kräver DOUBLE indata accepterar inte DECFLOAT direkt. Konvertera värdet till DOUBLE först (detta kan leda till precisionsförlust).
  • DECFLOAT är inte kompatibel med raderingsvektorer. När du skapar en deltatabell med DECFLOAT-kolumner, sätt TBLPROPERTIES ('delta.enableDeletionVectors' = 'false'). För befintliga tabeller, ta bort funktionen för raderingsvektortabell innan du lägger till DECFLOAT-kolumner.
  • Delta-tabeller som innehåller DECFLOAT kan inte ha Iceberg-läsningar aktiverade .
  • Att skriva DECFLOAT-värden direkt till Parquet-filer stöds inte.
  • DECFLOAT-kolumner har inga min/max-statistik för datahopp. De kan inte vara partitionskolumner, klustringsnycklar, Z-ordningskolumner eller Bloom-filterindexkolumner.
  • Att byta kolumn mellan DECFLOAT(16) och DECFLOAT(34) med ALTER COLUMN stöds inte.