Exercise: Create a function to show the reign of the various Doctors

This exercise is provided to allow potential course delegates to choose the correct Wise Owl Microsoft training course, and may not be reproduced in whole or in part in any format without the prior written consent of Wise Owl.

The answer to the exercise will be included and explained if you attend the course listed below!

Category ==> SQL  (156 exercises)
Topic ==> Scalar functions  (3 exercises)
Level ==> Relatively easy
Course ==> Advanced SQL
Before you can do this exercise, you'll need to download and unzip this file (if you have any problems doing this, click here for help).

You need a minimum screen resolution of about 700 pixels width to see our exercises. This is because they contain diagrams and tables which would not be viewable easily on a mobile phone or small laptop. Please use a larger tablet, notebook or desktop computer, or change your screen resolution settings.

First (if you haven't already done so) run the script shown above to generate the Doctor Who training database.

This exercise uses the DateDiff function, which calculates the difference between two dates in days, months, years, etc, and takes 3 arguments:

Argument What to put
Interval The time period to use (use day for this exercise)
Start date The start date
End date The end date

For example, the following would give 365 as the answer:

-- this would give 365 as the difference

SELECT DateDiff(day,'20150101','20160101')

Write a function called fnReign which uses the DateDiff function to return the number of days between any two given dates.  Here's a quick reminder of scalar function syntax:


@Parameter1 datatype,


@Parametern datatype,


RETURNS datatype



RETURN something


Call your squeaky clean new function within a query to show the relative duration of each doctor's "reign":

Reigns in days

If the end date is null for a doctor your function should substitute the current date.  This may mean that Peter Capaldi appears higher up the list when you run your query than is shown here (since he is the only doctor for whom the last episode date is null).


Optionally, save your query as Baker wins.sql, then close it down.

This page has 1 thread Add post
04 Jul 17 at 07:20

One possible answer:

CREATE FUNCTION fnRegion(@FirstDate DATE,@LastDate DATE)
SELECT @Date_Diff=DateDIff(day,@FirstDate,ISNULL(@LastDate,Getdate()))
RETURN  @Date_Diff

select DoctorName,dbo.fnRegion(FirstEpisodeDate,LastEpisodeDate)[Reign in days] from tblDoctor

04 Jul 17 at 08:18

We don't normally post answers (apart from anything else, it removes the incentive to solve the exercise), but I'll make an exception for this!