قيم النقطة العائمة الخاصة

ينطبق على: وضع علامة Databricks SQL وضع علامة Databricks Runtime

يتم التعامل مع العديد من قيم النقطة العائمة الخاصة بطريقة غير حساسة لحالة الأحرف:

  • Inf، +Inf، Infinity، +Infinity: ما لا نهاية إيجابية
  • -Inf، -Infinity: اللانهاية السلبية
  • NaN: ليس رقما

دلالات ما لا نهاية إيجابية وسلبية

لا نهاية إيجابية وسلبية لها الدلالات التالية:

  • ترجع اللانهاية الموجبة المضاعفة بأي قيمة موجبة اللانهاية الموجبة.
  • ترجع اللانهاية السالبة مضروبة في أي قيمة موجبة اللانهاية السالبة.
  • ترجع اللانهاية الموجبة مضروبة في أي قيمة سالبة اللانهاية السالبة.
  • ترجع اللانهاية السالبة مضروبة في أي قيمة سالبة اللانهاية الموجبة.
  • ترجع اللانهاية الموجبة أو السلبية مضروبة في 0 NaN.
  • اللانهاية الإيجابية أو السلبية تساوي نفسها.
  • في التجميعات، يتم تجميع جميع قيم اللانهاية الموجبة معا. وبالمثل، يتم تجميع جميع قيم اللانهاية السالبة معا.
  • يتم التعامل مع اللانهاية الموجبة والنهاية السالبة كقيم عادية في مفاتيح الربط.
  • فرز اللانهاية الموجبة أقل من NaN وأعلى من أي قيم أخرى.
  • فرز اللانهاية السالبة أقل من أي قيم أخرى.

دلالات NaN

عند التعامل مع float أو double الأنواع التي لا تتطابق تماما مع دلالات النقطة العائمة القياسية، تحتوي NaN على الدلالات التالية:

  • ترجع NaN = NaN القيمة true.
  • في التجميعات، يتم تجميع جميع قيم NaN معا.
  • يتم التعامل مع NaN كقيمة عادية في مفاتيح الربط.
  • تستمر قيم NaN عندما تكون بترتيب تصاعدي، أكبر من أي قيمة رقمية أخرى.

الأمثلة

> 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