یافتن فیلدهای خالی در SQL Server
باسلام خدمت دوستان عزیز
برای یافتن فیلدهای خالی و فیلدهایی که NULL هستند در SQL Server چگونه باید عمل کرد؟
مثلا می خواهم لیست افرادی را نمایش بدهد که فیلد Name آنها خالی است و مقداری در آن وارد نشده.( در برخی از فیلدهای من عبارت NULL وجود دارد و در برخی دیگر به صورت خودکار معادل طول رشته آن فیلد فضای خالی قرار گرفته ).
با سپاس و تشکر فراوان
10 پاسخ
فرض میکنیم که نام جدول شما T2 هست و دارای Code و number و Name هست و برای اینکه بدونید کدام یک از Name ها خالی هست از دستور های زیر استفاده کنید
SELECT * FROM T2 WHERE Name IS NULL OR Name = '';
یا
SELECT * FROM T2 WHERE NULLIF(Name, '') IS NULL;
خروجی هم به شکل زیر در میاد
یک رشته از نوع nchar(10) هستش که داخل آنها اعداد و حروف انگلیسی هستش
مشکل این بود که count(*) همه رکوردهارو برمیگردونه اما وقتی برای count نام ستون رو مشخص میکنی فقط ردیف هایی که مقدارشون null نیست در نظر گرفته میشن.
متشکرم درست شد.
علتش چی بود ؟
با تشکر از شمادوست عزیز
باتوجه به راهنمایی شما حالا من بخواهم تعداد افرادی را که فیلد Name آنها خالی هست را بدست بیاورم از دستور زیر استفاده می کنم و نتیجه ای متفاوت مشاهده می کنم.
من ابتدا می نویسم کد زیر را:
SELECT * FROM T2 WHERE Name IS NULL OR Name = '';
سپس برای بدست آوردن تعداد آنها کد زیر را می نویسم :
SELECT COUNT(Name) FROM T2 WHERE Name IS NULL OR Name = '';
که تعداد افرادی که در دستور اول نشان میدهد با تعداد افرادی که در دستور دوم نشان می دهد متفاوت است. علت اینکه عملکرد دستور اول با دستور دوم متفاوت است چیست؟
باتشکر
در دستور اول درست میاره و کامل ولی فقط وقتی از COUNT(Name) استفاده کنم اشتباه می کنه.
دستورات شما روی SQL من به درستی نتیجه رو نشون میده یعنی چه NULL و چه خالی بود رو برامون برمیگردونه اطلاعات داخل جدول ات چیه؟
کد زیر رو جایگزین قبلیه کن
SELECT COUNT(*) FROM T2 WHERE Name IS NULL or Name = '';
برای مثال من هم nchar هست ببینید در صورتی محاسبه میکنه که با خالی باشه یا با Space پر شده باشه در این صورت براتون محاسبه میشه من فکر میکنم شما عبارت NULL رو داخل ستون Name تایپ کرده باشید که اگر این چنین هست پس Name شما برابر با خالی نیست چون NULL رو تایپ کردید.
در دستور من فقط عبارتهای Name = '' را محاسبه می کنه و مقادیری را که داخل آنها NULL نوشته شده را حساب نمی کنه.