2016-06-21 2 views
2

Я пытаюсь выяснить, как конвертировать возраст студента в возраст + месяцы. Так, например, если дата рождения ученика была 1/1/2000, то возраст студента будет выглядеть как: 16 и 6 месяцевВозрастной формат - год и месяц

Я могу выполнить скрипт запроса, чтобы возраст студента представлялся как целое число, но am не уверен, как включить месяцы. Что мне нужно изменить?

ALTER procedure [dbo].[RP_Student_Attendance] (@perf_code varchar(10)) 
as 

-- set @perf_code = '3496A' 

SELECT 
    i.short_name, 
    i.text1 as perf_desc, 
    i.text2 perf_dates, 
    i.text3 perf_times, 
    p.perf_no, 
    h.[Role], 
    h.customer_no, 
    c.sex, b.birthday, 
    g.grade_level, 
    --(DATEDIFF(yy,b.birthday,GETDATE())) as student_age, 
    student_age = CASE 

WHEN dateadd(year, datediff (year, b.birthday, GETDATE()),b.birthday) > GETDATE() 
THEN datediff (year, b.birthday, GETDATE()) - 1 
ELSE datediff (year, b.birthday, GETDATE())end, 
    c.fname + ' ' + c.lname as student_name 

FROM T_INVENTORY i 
JOIN T_PERF p on i.inv_no = p.perf_no 
JOIN T_TICKET_HISTORY h on p.perf_no = h.perf_no and [Role] = 4 
JOIN T_CUSTOMER c on h.customer_no = c.customer_no 
LEFT JOIN (select customer_no, key_value as birthday from TX_CUST_KEYWORD where keyword_no = 1) b on c.customer_no = b.customer_no 
LEFT JOIN (select customer_no, key_value as grade_level from TX_CUST_KEYWORD where keyword_no = 428) g on c.customer_no = g.customer_no 
WHERE p.perf_code = @perf_code 

ответ

0

Если вы не заботитесь о точности, это получает вас в мяч парк:

mysql> select floor(datediff(now(), '2000-01-01')/365) as years, ceil(mod(datediff(now(), '2000-01-01'), 365)/30) as months; 
+-------+--------+ 
| years | months | 
+-------+--------+ 
| 16 |  6 | 
+-------+--------+ 

Повторяю, используйте только , если вы не заботитесь о точности. Это может облегчить отчет «7» месяцев, когда он на самом деле «6».