معالجة حالات NULL

مكتمل

قيمة NULL تعني دون قيمة أو غير معروف. لا تعني صفرًا أو فارغة، أو حتى سلسلة فارغة. هذه القيم غير معروفة. يمكن استخدام قيمة NULL للقيم التي لم يتم توفيرها بعد، على سبيل المثال، عندما لا يقوم العميل بعد بتوفير عنوان بريد إلكتروني. كما رأيت سابقًا، يمكن إرجاع قيمة NULL أيضًا بواسطة بعض دالات التحويل إذا كانت القيمة غير متوافقة مع نوع البيانات الهدف.

ستحتاج في كثير من الأحيان إلى اتخاذ خطوات خاصة للتعامل مع NULL. NULL هو حقًا دون قيمة. وغير معروف. فهي لا تساوي أي شيء، وليست غير متكافئة مع أي شيء. NULL ليست أكبر من أي شيء أو أقل منه. لا يمكننا أن نقول أي شيء عن ماهيتها، ولكن في بعض الأحيان نحن بحاجة إلى العمل مع القيم NULL. لحسن الحظ، يوفر T-SQL دالات لتحويل القيم NULL أو استبدالها.

ISNULL

تتعامل دالة ISNULL مع وسيطتين. الأولى هي تعبير نختبره. إذا كانت قيمة الوسيطة الأولى NULL، ترجع الدالة الوسيطة الثانية. إذا لم يكن التعبير الأول فارغًا، فيتم إرجاعه دون تغيير.

على سبيل المثال، افترض أن الجدول Sales.Customer في قاعدة بيانات يتضمن العمود MiddleName يسمح بالقيم NULL. عند الاستعلام عن هذا الجدول، بدلاً من إرجاع NULL في النتيجة، يمكنك اختيار إرجاع قيمة معينة، مثل "None".

SELECT FirstName,
      ISNULL(MiddleName, 'None') AS MiddleIfAny,
      LastName
FROM Sales.Customer;

قد تبدو نتائج هذا الاستعلام على النحو التالي:

الاسم الأول

MiddleIfAny

اسم العائلة

Orlando

N.

Gee

Keith

بلا

Howard

Donna

و.

Gonzales

...

...

...

إشعار

يجب أن تكون القيمة التي تم استخدامها بدلاً من NULL من نفس نوع البيانات مثل التعبير الذي يتم تقييمه. في المثال أعلاه، MiddleName هو varchar، لذلك لا يمكن أن تكون قيمة الاستبدال رقمية. بالإضافة إلى ذلك، ستحتاج إلى اختيار قيمة لن تظهر في البيانات كقيمة عادية. قد يكون من الصعب أحيانًا العثور على قيمة لن تظهر أبدًا في بياناتك.

تناول المثال السابق قيمة NULL في الجدول المصدر ولكن يمكنك استخدام ISNULL مع أي تعبير قد يُرجع NULL بما في ذلك تداخل الدالة TRY_CONVERT ضمن دالة ISNULL.

COALESCE

الدالة ISNULL ليست قياسية من ANSI، لذلك قد ترغب في استخدام الدالة COALESCE بدلاً من ذلك. تعد الدالة COALESCE أكثر مرونة من حيث أنها يمكن أن تأخذ عددا متغيرا من الوسيطات، كل منها تعبير. سيتم من خلالها إرجاع التعبير الأول في القائمة غير NULL.

إذا كان هناك وسيطتين فقط، تتصرف COALESCE مثل ISNULL. ومع ذلك، مع أكثر من وسيطتين، يمكن استخدام COALESCE كبديل لتعبير CASE متعدد الأجزاء باستخدام ISNULL.

إذا كانت كل الوسائط NULL، فيتم من خلال COALESCE إرجاع NULL. يجب أن ترجع كل التعبيرات نفس أنواع البيانات أو متوافقة.

بناء الجملة كما يلي:

SELECT COALESCE ( expression1, expression2, [ ,...n ] )

يستخدم المثال التالي جدولاً وهميًا يسمى HR.Wages، الذي يتضمن ثلاثة أعمدة تحتوي على معلومات حول الأرباح الأسبوعية للموظفين: السعر بالساعة والراتب الأسبوعي والعمولة لكل وحدة تم بيعها. ومع ذلك، يتلقى الموظف نوعًا واحدًا فقط من الدفع. لكل موظف، سوف يكون لواحد من هذه الأعمدة الثلاثة قيمة، أما القيمتين الثانيتين، فستكونان NULL. لتحديد المبلغ الإجمالي المدفوع لكل موظف، يمكنك استخدام COALESCE لإرجاع القيمة غير null الموجودة في هذه الأعمدة الثلاثة فقط.

SELECT EmployeeID,
      COALESCE(HourlyRate * 40,
                WeeklySalary,
                Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;

تبدو النتائج كما يلي:

EmployeeID

WeeklyEarnings

1

899.76

2

1001.00

3

1298.77

...

...

NULLIF

تتيح لك الدالة NULLIF إمكانية إرجاع NULL تحت شروط معينة. تحتوي هذه الدالة على تطبيقات مفيدة في مناطق مثل تنظيف البيانات، عندما ترغب في استبدال أحرف فارغة أو عناصر نائبة بالقيمة NULL.

تأخذ NULLIF وسيطتين وترجع NULL إذا كانت مكافئة. إذا لم تكن متساوية، يتم من خلال NULLIF إرجاع الوسيطة الأولى.

في هذا المثال، يتم من خلال NULLIF استخدام NULL بدلاً من خصم بالقيمة 0. تُرجع قيمة الخصم إذا لم تكن 0:

SELECT SalesOrderID,
      ProductID,
      UnitPrice,
      NULLIF(UnitPriceDiscount, 0) AS Discount
FROM Sales.SalesOrderDetail;

تبدو النتائج كما يلي:

رقم تعريف الطلب

معرّف المنتج

UnitPrice

Discount

71774

836

356.898

قيمة فارغة

71780

988

112.998

0.4

71781

748

818.7

قيمة فارغة

71781

985

112.998

0.4

...

...

...

...