کاربرد تابع 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 تشکر