SQL ISNULL() ، NVL() ، IFNULL() و COALESCE() وظائف
انظروا إلى ما يلي "Products" الجدول:
P_Id | اسم المنتج | سعر الوحدة | الوحدات في المخزن | الوحدات_المطلوبة |
---|---|---|---|---|
1 | Jarlsberg | 10.45 | 16 | 15 |
2 | مسكربون | 32.56 | 23 | |
3 | غورغانزولا | 15.67 | 9 | 20 |
لنفترض أن "UnitsOnOrder" العمود هو اختياري، ويمكن أن تحتوي على قيم فارغة.
لدينا عبارة SELECT التالية:
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
في المثال أعلاه، إذا كان أي من "UnitsOnOrder" القيم هي فارغة، والنتيجة هي فارغة.
مايكروسوفت ISNULL() يتم استخدام الدالة لتحديد كيف نريد لعلاج قيم فارغة.
و NVL() ، IFNULL() ، و COALESCE() يمكن أن يعمل أيضا أن تستخدم لتحقيق نفس النتيجة.
في هذه الحالة نريد قيم فارغة ليكون صفرا.
أدناه، إذا "UnitsOnOrder" لاغيا وانها لن تضر الحساب، لأن ISNULL() إرجاع صفر إذا كانت القيمة فارغة:
MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+IIF(ISNULL(UnitsOnOrder),0,UnitsOnOrder))
FROM Products
SQL Server
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
Oracle
أوراكل لم يكن لديك ISNULL() وظيفة. ومع ذلك، يمكننا استخدام NVL() وظيفة لتحقيق نفس النتيجة:
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
MySQL
الخلية لا يكون لها ISNULL() وظيفة. ومع ذلك، فإنه يعمل مختلفة قليلا من مايكروسوفت ISNULL() وظيفة.
في الخلية يمكننا استخدام IFNULL() وظيفة، مثل هذا:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
أو يمكننا استخدام COALESCE() وظيفة، مثل هذا:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products