کاربرد تابع DATEDIFF در Query نویسی - قسمت دوم
سه شنبه 26 آبان 1394در این مقاله با یک دیتابیس کوچک اما با پتانسیل، برای نوشتن Query آشنا میشویم
در ادامه قسمت اول این مقاله در این جلسه با Query های زیر و نکات آن آشنا شده
Query دوم :
چه اشخاصی در یک تاریخ خاص زنده بودن و چند ساله بودن ؟
SELECT FirstName, LastName, DATEDIFF(yy,DateOfBirth, '1/1/2001') AS Age FROM Person WHERE DateOfBirth <= '1/1/2001' AND (DateOfDeath IS NULL OR DateOfDeath >= '1/1/2001' ) ORDER BY Age ASC
خب همون طور که مشاهده میکنید تاریخ تولد باید کوچکتر از تاریخ مورد نظر باشد و تاریخ فوت NULL باشد یا بزرگتر از تاریخ موردنظر ما باشد
Query سوم :
سن زوج ها را در تاریخ ازدواجشون لیست کنید .
در این مثال و مثال هایی از این قبیل ما باید از Self Join استفاده کنیم تا بتوانیم از یک جدول Person هم اطلاعات عروس و هم اطلاعات داماد را استخراج کنیم
SELECT CONVERT( VARCHAR(10), DateOfWedding,101) AS WeddingDate, H.FirstName + ' ' + H.LastName AS Groom, DATEDIFF(yy,H.DateOfBirth, Marriage.DateOfWedding) AS GroomAge, W.FirstName + ' ' + W.LastName AS Bride, DATEDIFF(yy,W.DateOfBirth, Marriage.DateOfWedding) AS BrideAge FROM Marriage INNER JOIN Person H ON Marriage.HusbandID = H.personID INNER JOIN Person W ON Marriage.WifeID = W.personID ORDER BY DateOfWedding
Query چهارم :
چه اشخاصی پس از چند سال زندگی مشترک طلاق گرفته اند ؟
SELECT Hubby.FirstName + ' ' + Hubby.LastName AS XHubby, Wife.FirstName + ' ' + Wife.LastName AS XWife, DateOfDivorce, DATEDIFF(yy, DateOfWedding, DateOfDivorce) AS YrsMarried FROM Person AS Hubby JOIN Marriage ON Hubby.PersonID = Marriage.HusbandID JOIN Person AS Wife ON Marriage.WifeID = WIfe.PersonID WHERE DateOfDivorce IS NOT NULL ORDER BY YrsMarried DESC
همانطور که مشاهده میکنید در مثال هایی که از Self Join استفاده میشود حتما باید برای جدول مورد نظر از اسم مستعار Alias استفاده کرد تا دسترسی های مختلفی به یک جدول داشته باشیم .
Query پنجم :
لیست تمام اشخاص به همراه اسم والدین ( ممکن است برای همه اشخاص اطلاعات والدین در دسترس نباشد )
نکته ایی که در این مثال وجود دارد این است که اگر ما از INNER JOIN استفاده کنیم با توجه به شرایط گفته شده ممکن است نتوانیم اطلاعات تمام اشخاص را بازیابی کنیم ! (چرا ؟)
به همین دلیل باید با LEFT OUTER JOIN این مثال را انجام دهیم .
SELECT Person.PersonID, CONVERT(NVARCHAR(15), Person.DateofBirth,1) AS BirthDate, Person.FirstName, Person.Gender, ISNULL(F.FirstName + ' ' + F.LastName, ' * unknown *') as Father, ISNULL(M.FirstName + ' ' + M.LastName, ' * unknown *') as Mother FROM Person LEFT OUTER JOIN Person F ON Person.FatherID = F.PersonID LEFT OUTER JOIN Person M ON Person.MotherID = M.PersonID ORDER BY Person.DateOfBirth ASC
در این مثال از تابع ISNULL استفاده کردیم برای زمانی که اگر دیتایی برابر با NULL بود یک عبارت دلخواه به جای آن نمایش داده شود
فرمت این تابع به این شکل است :
در قسمت بعد با Query های پیشرفته تری آشنا خواهید شد از قبیل مواردی چون Group BY و Select های تو در تو
- SQL Server
- 2k بازدید
- 3 تشکر