DECFLOAT jenis

Berlaku untuk:tanda centang ya Databricks SQL ditandai ya Databricks Runtime 19 ke atas

Mewakili angka titik mengambang basis-10 dengan 16 atau 34 digit signifikan dan tanpa skala tetap.

Penting

DECFLOAT dalam Beta. Admin workspace harus mengaktifkan tipe data DECFLOAT di Previews.

Sintaks

DECFLOAT [ ( p ) ]
  • p: Jumlah maksimum digit desimal signifikan. Nilai yang didukung adalah 16 dan 34. Default-nya adalah 34.

DECFLOAT tidak menerima argumen skala. Setiap nilai memiliki eksponennya sendiri.

Limits

Property DECFLOAT(16) DECFLOAT(34)
Digit signifikan Hingga 16 Hingga 34
Nilai positif terkecil yang tidak nol 1E-398 1E-6176
Nilai hingga positif terbesar (10^16 - 1) × 10^369 (10^34 - 1) × 10^6111

Batas yang sama berlaku untuk angka negatif. Kedua tipe juga mendukung infinity dan NaN.

Literals

Gunakan CAST dengan string atau nilai numerik yang didukung. String juga dapat mengandung NaN, Inf, atau Infinity.

Notes

DECFLOAT mewakili nilai desimal seperti 0.1 tepat. Nilai yang melebihi presisi dapat dibulatkan tanpa kesalahan, termasuk dengan TRY_CAST. Cast teks desimal langsung. Mengonversi melalui FLOAT atau DOUBLE bisa kehilangan presisi.

Output string mempertahankan nol yang tertinggal, sehingga nilai yang sama seperti 1.5 dan 1.50 dapat menghasilkan string yang berbeda (+15E-1 dan +150E-2). Lempar dari DECFLOAT ke DECIMAL round half up, secara independen dari DECFLOAT_ROUNDING_MODE.

  • Aritmetika mempertahankan presisi ketika kedua operand memiliki tipe DECFLOAT yang sama. Presisi campuran atau operasi dengan tipe numerik lain yang didukung menggunakan DECFLOAT(34).
  • SUMdan AVG kembali.DECFLOAT(34) MIN dan MAX menjaga presisi input.
  • SQRT, ABS, dan ROUND menerima DECFLOAT secara langsung.

DECFLOAT_ROUNDING_MODEmengontrol pembulatan untuk lemparan ke DECFLOAT, +, , -*, /, SUMSQRTdan AVG. Defaultnya adalah ROUND_HALF_EVEN. Mode lain yang didukung adalah ROUND_HALF_UP, ROUND_CEILING, ROUND_FLOOR, dan ROUND_DOWN. DIV menghilangkan bagian pecahan dari hasil, terlepas dari DECFLOAT_ROUNDING_MODE. ROUND, BROUND, dan TRUNCATE menggunakan aturan pembulatan mereka sendiri.

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

Dengan mode pembulatan default, overflow menghasilkan tak hingga dan pembagian dengan nol menghasilkan tak hingga atau NaN. Mode ANSI tidak mengubah hasil ini. Fungsi aritmatika yang didukung TRY_* mempertahankan tak terhingga dan NaN daripada mengembalikan NULL. NaN membandingkan sama dan mengurutkan setelah infinitas positif. Positif dan negatif nol dibandingkan sama. Gunakan ISNAN untuk mendeteksi 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

  • Operasi sisa dan bit demi bit tidak didukung.
  • Fungsi yang memerlukan DOUBLE input tidak menerima DECFLOAT secara langsung. Konversi nilai ke DOUBLE first (ini dapat menyebabkan kehilangan presisi).
  • DECFLOAT tidak kompatibel dengan vektor penghapusan. Saat membuat tabel Delta dengan kolom DECFLOAT, atur TBLPROPERTIES ('delta.enableDeletionVectors' = 'false'). Untuk tabel yang sudah ada, hapus fitur tabel vektor penghapusan sebelum menambahkan kolom DECFLOAT.
  • Tabel Delta yang berisi DECFLOAT tidak dapat mengaktifkan pembacaan Iceberg .
  • Menulis nilai DECFLOAT langsung ke file Parquet tidak didukung.
  • Kolom DECFLOAT tidak memiliki statistik min/max untuk lompatan data. Kolom tersebut tidak bisa berupa kolom partisi, kunci clustering, kolom urutan Z, atau kolom indeks filter Bloom.
  • Mengganti kolom antara DECFLOAT(16) dan DECFLOAT(34) dengan ALTER COLUMN tidak didukung.