Nilai titik mengambang khusus

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Beberapa nilai floating point khusus diperlakukan dengan cara yang tidak memperhatikan huruf besar/kecil.

  • Inf, +Inf, Infinity, +Infinity: tak terhingga positif
  • -Inf, -Infinity: negatif tak terhingga
  • NaN: bukan angka

Semantik tak terhingga positif dan negatif

Ketakterhinggaan positif dan negatif memiliki arti sebagai berikut:

  • Tak terhingga positif dikalikan dengan nilai positif menghasilkan tak terhingga positif.
  • Tak terhingga negatif dikalikan dengan nilai positif menghasilkan tak terhingga negatif.
  • Tak terhingga positif yang dikalikan dengan nilai negatif akan menghasilkan tak terhingga negatif.
  • Nilai negatif tak terhingga dikalikan dengan nilai negatif mana pun menghasilkan nilai positif tak terhingga.
  • Tak terhingga, baik positif maupun negatif, jika dikalikan dengan 0 akan menghasilkan NaN.
  • Tak terhingga positif atau negatif sama dengan dirinya sendiri.
  • Dalam agregasi, semua nilai tak terhingga positif dikelompokkan bersama. Demikian pula, semua nilai tak terhingga negatif dikelompokkan bersama.
  • Bilangan tak hingga positif dan bilangan tak hingga negatif diperlakukan sebagai nilai normal dalam kunci gabungan.
  • NaN memiliki urutan lebih rendah dari positif tak terhingga, yang juga lebih tinggi dari nilai lainnya.
  • Minus tak berhingga diurutkan lebih rendah daripada nilai lainnya.

Semantik NaN

Saat berhadapan dengan jenis float atau double yang tidak benar-benar cocok dengan semantik titik kambang standar, NaN memiliki semantik berikut:

  • NaN = NaN menghasilkan benar.
  • Dalam agregasi, semua nilai NaN dikelompokkan bersama.
  • NaN diperlakukan sebagai nilai normal dalam kunci gabungan.
  • Nilai NaN ditempatkan terakhir ketika dalam urutan naik, lebih besar dari nilai numerik lainnya.

Contoh

> SELECT double('infinity');
 Infinity

> SELECT float('-inf');
 -Infinity

> SELECT float('NaN');
 NaN

> SELECT double('infinity') * 0;
 NaN

> SELECT double('-infinity') * (-1234567);
 Infinity

> SELECT double('infinity') < double('NaN');
 true

> SELECT double('NaN') = double('NaN');
 true

> SELECT double('inf') = double('infinity');
 true

> SELECT COUNT(*), c2
    FROM VALUES (1, double('infinity')),
                (2, double('infinity')),
                (3, double('inf')),
                (4, double('-inf')),
                (5, double('NaN')),
                (6, double('NaN')),
                (7, double('-infinity'))
        AS test(c1, c2)
    GROUP BY c2;
        2       NaN
        2 -Infinity
        3  Infinity