2016-06-21 43 views
2

Ich versuche herauszufinden, wie das Student Alter in Alter + Monate zu konvertieren. Wenn zum Beispiel das Geburtsdatum eines Studenten 1/1/2000 war, dann würde das Schüleralter wie folgt aussehen: 16 und 6 MonateAlter Format - Jahr und Monat

Ich bin in der Lage, die Abfrage so zu skripten, dass das Schüleralter als ganze Zahl erscheint, aber bin nicht sicher, wie man dann die Monate einbezieht. Was muss ich ändern?

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 

Antwort

0

Wenn Sie nicht über die Präzision kümmern, das bekommt man in den Ball Park:

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 | 
+-------+--------+ 

ich wiederhole, verwenden Sie nur , wenn Sie nicht über die Präzision kümmern. Dies könnte leicht "7" Monate melden, wenn es tatsächlich "6" ist.