2010-11-18 10 views

Antwort

0
Drop table Bird; 

CREATE TABLE Bird (
    name VARCHAR(20), 
    owner VARCHAR(20), 
    species VARCHAR(20), 
    sex CHAR(1), 
    birth DATE, 
    death DATE 
); 



INSERT INTO Bird VALUES ('BlueBird','Joe','Car','f','1999-03-30',NULL); 
INSERT INTO Bird VALUES ('RedBird','Yin','Bus','m','1979-04-30',NULL); 
INSERT INTO Bird VALUES ('RedBird','Yin','Bus','m','1998-01-30',NULL); 



SELECT name, birth, CURDATE(), 
     (YEAR(CURDATE())-YEAR(birth)) 
     - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) 
     AS age 
     FROM Bird; 
+0

singh danke für deine antwort könnte mir deine select-aussageabfrage erklären – ratty

1

Sie können zu einem well known solution von Steve Kass entwickelt beziehen möchten, die für eine Reihe von Grenzfällen einschließlich Schaltjahre berücksichtigt. Hier ist es als Referenz:

DECLARE @birthdate SMALLDATETIME, @endDate SMALLDATETIME 
SET @birthdate = '19791204' 
SET @endDate = GETDATE() 

SELECT DATEDIFF 
( 
    YEAR, 
    @birthdate, 
    @endDate 
) - CASE 
    WHEN 100 * MONTH(@endDate) + DAY(@endDate) 
    < 100 * MONTH(@birthdate) + DAY(@birthdate) 
    THEN 1 ELSE 0 END 
0
DECLARE 
@dob DATETIME 
BEGIN 
SET @dob = '19791204' -- set your birthday in datetime.. 
SELECT DATEDIFF(YEAR,@dob,GETDATE()) AS AGE 
-- if you do it reverse : DATEDIFF(YEAR,GETDATE(),@dob,) you will get negative 
-- refer : http://msdn.microsoft.com/en-us/library/ms189794.aspx 
END 
Verwandte Themen