1> /* Advanced SQL Programming				Fall 2002*/
2> /*								 */	
3> /*          In-class/take-home exercises, Sept. 30th 		 */
4> /*								 */
5> use evelyn
1> /*								 */
2> /*  How long till Dec. 9th in months? days? months and days?	 */
3> /*								 */
4> select datediff(mm, 'Sep 30 2002', 'Dec 9 2002') months
5> select datediff(dd, '9/30/2002', '12/9/2002') days
6> select datediff(mm, '30 Sep 2002', '30 Nov 2002'), "months and ",
7>   datediff(dd, '11/30/2002', '12/9/2002'), "days"
 months      
 ----------- 
           3 

(1 row affected)
 days        
 ----------- 
          70 

(1 row affected)
                                          
 ----------- ----------- ----------- ---- 
           2 months and            9 days 

(1 row affected)
1> /*								 */
2> /*  How long since our first class in wks? days? hrs? days+hrs?  */
3> /*								 */
4> select datediff(wk, '9/9/2002 6:30PM', '9/30/2002 8:00PM') weeks
5> select datediff(dd, '9/9/2002 18:30', '9/30/2002 20:00') days
6> select datediff(hh, '9/9/2002 18:30', '9/30/2002 20:00') hours
7> select datediff(dd, '9/9/2002 18:30', '9/30/2002 20:00'), "days and ", 
8>   datediff(hh, '9/9/2002 18:30', '9/30/2002 20:00') -
9>   datediff(dd, '9/9/2002 18:30', '9/30/2002 20:00') * 24, "hour(s)"
 weeks       
 ----------- 
           3 

(1 row affected)
 days        
 ----------- 
          21 

(1 row affected)
 hours       
 ----------- 
         505 

(1 row affected)
                                           
 ----------- --------- ----------- ------- 
          21 days and            1 hour(s) 

(1 row affected)
1> /*								 */
2> /*  Day of week of next birthday.				 */
3> /*								 */
4> select datename(dw, '5/9/2003') as DayName
5> select datepart(dw, '5/9/2003') as DayNum
 DayName                        
 ------------------------------ 
 Friday                         

(1 row affected)
 DayNum      
 ----------- 
           6 

(1 row affected)
1> /*								 */
2> /* Exact age of someone born on July 10th, 1975 (yr, mo, days)	 */
3> /* Two different methods, each with some formatting:		 */
4> /*								 */
5> select datediff(yy, '7/10/1975', getdate()), "years",
6>     (datediff(mm, '7/10/1975', getdate()) -
7>        datediff(yy, '7/10/1975', getdate()) * 12), "month(s)",
8>     (datediff(dd, '7/10/1975', getdate()) -
9>       datediff(mm, '7/10/1975', getdate()) *30) -
10>       datediff(yy, '7/10/1975', getdate()) * 5.25, "day(s)"
                                                                  
 ----------- ----- ----------- -------- ------------------ ------ 
          27 years           3 month(s)               3.25 day(s) 

(1 row affected)
1> /*								 */
2> select 
3>   convert(char(2), datediff(yy, '7/10/1975', getdate())), "years",        
4>   convert(char(2), (datediff(mm, '7/10/2002', getdate()))), "month(s)",
5>   convert(char(2), (datediff(dd, '10/10/2002', getdate()))), "day(s)"
                                
 -- ----- -- -------- -- ------ 
 27 years 3  month(s) 1  day(s) 

(1 row affected)
1> /*								 */
2> /* (Question about today's date omitted - see T-SQL Web pages.	 */
3> /*								 */
4> /*  How many days did it take to ship orders? (Sample database)	 */
5> /*								 */
6> select orderdate, shipdate, datediff(dd, orderdate, shipdate) as
7>   DaysToShip
8> from ordermaster om, orderdetail od
9> where om.ordnum = od.ordnum
10> and shipdate is not null
 orderdate                  shipdate                   DaysToShip  
 -------------------------- -------------------------- ----------- 
        Jan  2 1999  2:30AM        Jan  1 1999 12:00AM          -1 
        Jan  2 1999  2:30AM        Jan  5 1999 12:00AM           3 
        Jan  2 1999 12:00AM        Jan  2 1999 12:00AM           0 
        Jan  2 1999 12:00AM        Jan  5 1999 12:00AM           3 
        Jan  2 1999 12:00AM        Jan  5 1999 12:00AM           3 
        Jan  2 1999 12:00AM        Jan  5 1999 12:00AM           3 
        Jan  2 1999 12:00AM        Jan  4 1999 12:00AM           2 
        Jan  2 1999 12:00AM        Jan  5 1999 12:00AM           3 
        Jan  2 1999 12:00AM        Jan  5 1999 12:00AM           3 
        Jan  2 1999 12:00AM        Jan  4 1999 12:00AM           2 
        Jan  2 1999 12:00AM        Jan  4 1999 12:00AM           2 
        Jan  2 1999 12:00AM        Jan  2 1999 12:00AM           0 
        Jan  2 1999 12:00AM        Jan  3 1999 12:00AM           1 
        Jan  2 1999 12:00AM        Jan  5 1999 12:00AM           3 
        Jan  5 1999  2:30PM        Jan  5 1999 12:00AM           0 
        Jan  2 1999 12:00AM        Jan  5 1999 12:00AM           3 
        Jan  3 1999 12:00AM        Jan  5 1999 12:00AM           2 

(17 rows affected)
1> /*								 */
2> /* Prevent negative "days to ship" - discuss in class.           */
3> /*								 */
4> /* Date format in legacy database:  yyyymmdd, as characters.	 */
5> /*								 */
6> select datename(mm, '20010929')
                                
 ------------------------------ 
 September                      

(1 row affected)
1> /*								 */
2> /* Convert to SQL-92 standard date format - two methods.	 */
3> /*								 */
4> select convert(char(12), convert(datetime, '20010929'), 101)
              
 ------------ 
 09/29/2001   

(1 row affected)
1> /*								 */
2> select substring('20010929', 5, 2) + "/" +
3>   substring('20010929', 7, 2) + "/" +
4>   substring('20010929', 1,4)
            
 ---------- 
 09/29/2001 

(1 row affected)
1> /*								 */
2> dump tran evelyn with no_log