بررسی توابع ISNULL,NULLIF,COALESCE در SQL Server

یکی از مواردی که در اکثر دیتابیس ها یافت می شود وجود ستون هایی با مقدار NULL است ، که کار کردن با آنها  نیازمند آشنایی با توابعی می باشد تا بدون هیچ خطایی بتوانیم کوئری هایمان را اجرا کنیم . در این مقاله به توضیح چند مورد از آنها خواهیم پرداخت .

()ISNULL :

این تابع از توابع مایکروسافت می باشد که دو پارامتر از ورودی دریافت می کند ، ساختار آن به صورت زیر می باشد :

ISNULL ( check_expression , replacement_value )

 تابع ISNULL مقدار پارامتر اول را چک می کند و اگر مقدار پرامتر اول NULL باشد آن را با مقدار دوم جایگزین می کند (مقدار پارامتر دوم را به عنوان خروجی بر میگرداند) در غیر اینصورت مقدار عبارت اول به عنوان خروجی برگردانده می شود   .

مثال 1:

 

جدول زیر را در نظر بگیرید :

IsNull-SQL

قصد داریم کوئری ای بنویسیم که تعداد فروش  و تعداد موجود هر کالا را در مبلغ آن ضرب کند و درآمد کل را نمایش دهد :برای اینکار نیازمند نوشتن همچین کوئری هستیم :

SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products

اگر کوئری فوق اجرا شود برای ردیف سوم مقدار NULL  برگردانده می شود  و دلیل آن هم روشن است ، چون مقدار تعداد فروش برای رکورد سوم برابر با NULL می باشد . برای تصحیح این کوئری می توانیم از تابع INSULL استفاده کنیم و مقدار ستون مورد نظر را اگر NULL بود  با  صفر (0) جایگزین کنیم :

SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products

 نکته : انجام عمل جمع بر روی مقدار null و عدد و یا رشته ای باعث برگرداندن مقدار NuLL خواهد شد  به همین دلیل در رکورد سوم شاهد مقدار NULL خواهیم بود .

IsNULL

()NULLIF :

این تابع دو عبارت از ورودی دریافت می کند و اگر مقدار هر دو عبارت برابر باشند مقدار NULL را بر میگرداند  و اگر مقدار دو عبارت ورودی برابر نباشند مقدار عبارت اول را به عنوان خروجی برمی گرداند . ساختار این تابع به صورت زیر می باشد :

NULLIF ( expression , expression )

مثال :

NULLIf

()COALESCE  :

این تابع چندین عبارت از ورودی  دریافت می کند و اولین عبارتی را که NULL نباشد را بر می گرداند .

ساختار دستور آن به صورت زیر می باشد :

COALESCE ( expression [ ,...n ] )

 جدول زیر را در نظر بگیرید :

Coalesce

برای هر کاربر سه فیلد تلفن وجود دارد که حداقل یک فیلد آن برای هر کاربر دارای مقدار می باشد ، قصد داریم کوئری بنویسیم که یک تلفن از هر کاربر را بر گرداند به شرط اینکه مقدار بر گردانده شده NULL نباشد . مشخص نیست که کدام فیلد برای هر کاربر دارای مقدار می باشد پس در این گونه موارد می توانیم از تابع  COALESCE استفاده کنیم :

select FirstName, COALESCE(tel1,tel2,tel3) as TEL from Members

نکته : حداقل یک پارامتر ورودی این تابع باید غیر NULL باشد در غیر اینصورت با خطای زیر برخورد خواهید کرد :

At least one of the arguments to COALESCE must be an expression that is not the NULL constant.


توسط : عثمان رحیمی  7 ماه قبل ، جمعه 18 اردیبهشت 1394 ساعت 20:49  1  5717

نظر شما برای ما مهم است و به ما در بهبود سایت کمک میکند.


ارسال نظر
  • نام (اختیاری ) :
  • پست الکترونیک :
  • توضیحات :

مطالب مرتبط

نظرات خوانندگان

کاربر مهمان ()  در تاریخ : 7 ماه قبل ، شنبه 26 اردیبهشت 1394 ساعت 00:00

مرسی....خیلی به درد بخور بود.