mojtaba
@
۱۲ دي ۱۳۸۴-۱۱:۱۰
NULLIF & ISNULL
<div dir="rtl" align="justify">يه مطلب كوچك و جالب از به كارگيري دستورات داخلي SQL امروز به ذهنم رسيد ديدم بد نيست بگم. در طراحي جدول ها هميشه اين اصول را رعايت كنيد :</div>
<div dir="rtl" align="justify"> 1)تمامي فيلدها را Not Null كنيد.</div>
<div dir="rtl" align="justify"> 2)براي تمامي فيلدها مقدار پيش فرض تعيين كنيد.</div>
<div dir="rtl" align="justify">خوب با اين كار خيلي از مسائل و مشكلات مربوط به Null حل مي شه. اما يه مشكل جديد پيش مياد!!!!! اونم اين كه اگه جايي بخواهيد از فيلدهايي كه وارد شده آمار بگيريد، به مشكل برمي خوريد.مثلاً در يك جدول شما اطلاعات مشتريان خود را نگه مي داريد و مي خواهيد بفهميد كه ميانگين سن مشتريان شما چقدر است. از اونجا كه شما براي همه فيلدها مقدار پيش فرض تعيين كرده ايد بنابراين همه ركوردها داراي مقدار هستند، هر كس اين فيلد را وارد نكرده باشد، مقدار مثلاً صفر(صفر مقدار پيش فرض است) در فيلد ثبت شده است. و در نتيجه ميانگين سن اشتباه به دست مي آيد. بايد به وسيله اي مقادير صفر را حذف كنيم.</div>
<div dir="rtl" align="justify">راه حل استفاده از تابع توكار<strong> ( NULLIF ( <em>expression1 </em>, </strong><em><strong>expression2</strong> </em><strong> </strong>مي باشد.اين تابع، مقدار دلخواه شما رو با NULL عوض مي كنه. expression1 نام فيلد يا تابع يا ... است كه مي خواهيد از لحاظ مقدار چك شود و expression2 مقدار مورد نظر (مقدار پيش فرض فيلد) است. مثلاً در مثال فوق(<strong>(</strong>Avg(<strong> NULLIF([Age],0</strong> مقادير صفر را با Nullعوض مي كند در نتيجه در تابع AVG حساب نمي شوند.</div>
<div dir="rtl" align="justify">يك تابع هم داريم كه عكس اين تابع عمل مي كنه اونم<strong> ( ISNULL ( expression1 , expression2 .</strong>اين تابع مفادير Null را به مقدار دلخواه شما تغيير مي ده. <strong>expression1</strong> نام فيلد يا تابع يا ... است كه مي خواهيد از لحاظ مقدار چك شود و <strong>expression2 </strong>مقداري است مي خواهيد با Null جايگزين بشه.</div>