DECFLOAT tipo

Si applica a:spunta sì Databricks SQL spuntato sì Databricks Runtime 19 e superiori

Rappresenta numeri in virgola mobile in base 10 con 16 o 34 cifre significative e senza scala fissa.

Important

DECFLOAT è in beta. Un amministratore di workspace deve abilitare il tipo di dato DECFLOAT nelle Anteprime.

Sintassi

DECFLOAT [ ( p ) ]
  • p: Il numero massimo di cifre decimali significative. I valori supportati sono 16 e 34. Il valore predefinito è 34.

DECFLOAT non accetta l'argomento della bilancia. Ogni valore ha il suo esponente.

Limits

Property DECFLOAT(16) DECFLOAT(34)
Cifre significative Fino a 16 Fino a 34
Valore positivo non nullo più piccolo 1E-398 1E-6176
Valore finito positivo più grande (10^16 - 1) × 10^369 (10^34 - 1) × 10^6111

Gli stessi limiti si applicano ai numeri negativi. Entrambi i tipi supportano anche Infinity e NaN.

Literals

Usa CAST con una stringa o un valore numerico supportato. Le stringhe possono anche contenere NaN, Inf, o Infinity.

Notes

DECFLOAT rappresenta valori decimali come 0.1 esattamente. I valori che superano la precisione possono arrotondare senza errore, incluso con TRY_CAST. Lancia direttamente testo decimale. Convertire attraverso FLOAT o DOUBLE può perdere precisione.

L'output delle stringhe preserva gli zeri finali, quindi valori uguali come 1.5 e 1.50 possono produrre stringhe diverse (+15E-1 e +150E-2). Tira da DECFLOAT per DECIMAL arrotondare metà verso l'alto, indipendentemente da DECFLOAT_ROUNDING_MODE.

  • L'aritmetica preserva la precisione quando entrambi gli operandi hanno lo stesso tipo DECFLOAT. Precisioni o operazioni miste con altri tipi numerici supportati utilizzano DECFLOAT(34).
  • SUM e AVG ritorno DECFLOAT(34). MIN e MAX mantenere la precisione dell'input.
  • SQRT, ABS, e ROUND accettare direttamente DECFLOAT.

DECFLOAT_ROUNDING_MODE arrotondamento dei controlli per i lanci a DECFLOAT, +, -, *, /, SQRT, SUM, e AVG. Il valore predefinito è ROUND_HALF_EVEN. Altri modi supportati sono ROUND_HALF_UP, ROUND_CEILING, ROUND_FLOOR, e ROUND_DOWN. DIV rimuove la parte frazionaria del risultato, indipendentemente da DECFLOAT_ROUNDING_MODE. ROUND, BROUND, e TRUNCATE usano le proprie regole di arrotondamento.

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

Con la modalità di arrotondamento predefinita, il sovraplessamento produce infinito e la divisione per zero produce infinito o NaN. La modalità ANSI non cambia questi risultati. Le funzioni aritmetiche supportate TRY_* preservano l'infinito e NaN invece di restituire NULL. I NaN si confrontano uguali e ordinano dopo l'infinito positivo. Positivo e zero negativo si confrontano uguali. Usato ISNAN per rilevare 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

  • Le operazioni di resto e bit a bit non sono supportate.
  • Le funzioni che richiedono DOUBLE input non accettano direttamente DECFLOAT. Converti il valore in DOUBLE primo (questo può portare a una perdita di precisione).
  • DECFLOAT non è compatibile con i vettori di delezione. Quando si crea una tabella Delta con colonne DECFLOAT, si imposta TBLPROPERTIES ('delta.enableDeletionVectors' = 'false'). Per le tabelle esistenti, elimina la caratteristica della tabella vettoriale di cancellazione prima di aggiungere le colonne DECFLOAT.
  • Le tabelle Delta contenenti DECFLOAT non possono avere le letture Iceberg attivate.
  • Scrivere i valori DECFLOAT direttamente nei file Parquet non è supportato.
  • Le colonne DECFLOAT non hanno statistiche minime/max per il salto dei dati. Non possono essere colonne di partizione, chiavi di clustering, colonne di ordine Z o colonne indice di filtro Bloom.
  • Cambiare una colonna tra DECFLOAT(16) e DECFLOAT(34) con ALTER COLUMN non è supportato.