کاربرد تابع DATEDIFF در Query نویسی - قسمت دوم

در این مقاله با یک دیتابیس کوچک اما با پتانسیل، برای نوشتن 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 های تو در تو 

 

دانلود فایل های ضمیمه مخصوص اعضای سایت می باشد !
کاربر مهمان! جهت دانلود و استفاده از امکانات سایت لطفا وارد سایت شوید و یا ثبت نام کنید