복붙노트

[SQL] MySQL은 계산 나이 (이노)

SQL

MySQL은 계산 나이 (이노)

내가-DD MM-YYYY를 형태로 테이블에 저장 출생의 사람 날짜가 내가 현재 날짜에서 뺄 경우, 어떤 형식으로 날짜가 반환된다?

어떻게 계산 누군가의 연령이 반환 형식을 사용할 수 있습니까?

해결법

  1. ==============================

    1.이 값은 datetime 데이터 형식으로 저장되어있는 경우 :

    이 값은 datetime 데이터 형식으로 저장되어있는 경우 :

    SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(dob) - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(dob, 5)) as age 
      FROM YOUR_TABLE
    

    덜 정확한 당신은 윤년을 고려하는 경우 :

    SELECT DATEDIFF(CURRENT_DATE, STR_TO_DATE(t.birthday, '%d-%m-%Y'))/365 AS ageInYears
      FROM YOUR_TABLE t 
    
  2. ==============================

    2.당신은 TIMESTAMPDIFF (단위, datetime_expr1, datetime_expr2) 기능을 사용할 수 있습니다 :

    당신은 TIMESTAMPDIFF (단위, datetime_expr1, datetime_expr2) 기능을 사용할 수 있습니다 :

    SELECT TIMESTAMPDIFF(YEAR, '1970-02-01', CURDATE()) AS age
    

    데모

  3. ==============================

    3.

    select *,year(curdate())-year(dob) - (right(curdate(),5) < right(dob,5)) as age from your_table
    

    이 방법으로 당신은보다 정확한 나이 계산을하기 위해 짝수 월 출생의 일 고려한다.

  4. ==============================

    4.

    SELECT TIMESTAMPDIFF (YEAR, YOUR_COLUMN, CURDATE()) FROM YOUR_TABLE AS AGE
    

    데모를 클릭하십시오 ..

    단순하지만 우아한 ..

  5. ==============================

    5.

    select floor(datediff (now(), birthday)/365) as age
    
  6. ==============================

    6.간단히:

    간단히:

    DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(`birthDate`)), '%Y')+0 AS age
    
  7. ==============================

    7.이 시도:

    이 시도:

    SET @birthday = CAST('1980-05-01' AS DATE);
    SET @today = CURRENT_DATE();
    
    SELECT YEAR(@today) - YEAR(@birthday) - 
      (CASE WHEN
        MONTH(@birthday) > MONTH(@today) OR 
        (MONTH(@birthday) = MONTH(@today) AND DAY(@birthday) > DAY(@today)) 
          THEN 1 
          ELSE 0 
      END);
    

    그것은 올해를 반환 - 출생 연도와 사람이 생일 아직 올해가 있었다 여부에 따라 조정합니다 (그 사람이 생일 이후 해가 될 것입니다 방법 이전).

    다른 방법의 반올림 오류가 여기에 제시된에서 그것은 고통을하지 않습니다.

    자유롭게 여기에서 적응

  8. ==============================

    8.문제는 MySQL 용 태그되고 있기 때문에, 나는 나를 위해 작동하는지 다음과 같은 구현을 가지고 있고 비슷한 대안이 다른 RDBMS의 곁에있을 것입니다 바랍니다. 여기에 SQL이다 :

    문제는 MySQL 용 태그되고 있기 때문에, 나는 나를 위해 작동하는지 다음과 같은 구현을 가지고 있고 비슷한 대안이 다른 RDBMS의 곁에있을 것입니다 바랍니다. 여기에 SQL이다 :

    select YEAR(now()) - YEAR(dob) - ( DAYOFYEAR(now()) < DAYOFYEAR(dob) ) as age 
    from table 
    where ...
    
  9. ==============================

    9.간단하게 할

    간단하게 할

    SELECT birthdate, (YEAR(CURDATE())-YEAR(birthdate)) AS age FROM `member` 
    

    생년월일은 생년월일 이름을 유지 필드 이름입니다 ) (명령) (CURDATE을 매년로 전환 마이너스 년에 () 생년월일 필드에서

  10. ==============================

    10.이것은 MySQL의에서 나이를 계산하는 방법이다 :

    이것은 MySQL의에서 나이를 계산하는 방법이다 :

    select
      date_format(now(), '%Y') - date_format(date_of_birth, '%Y') - 
      (date_format(now(), '00-%m-%d') < date_format(date_of_birth, '00-%m-%d'))
    as age from table
    
  11. ==============================

    11.당신은 함수가 그것을 할 수 있습니다 :

    당신은 함수가 그것을 할 수 있습니다 :

    drop function if exists getIdade;
    
    delimiter |
    
    create function getIdade( data_nascimento datetime )
    returns int
    begin
        declare idade int;
        declare ano_atual int;
        declare mes_atual int;
        declare dia_atual int;
        declare ano int;
        declare mes int;
        declare dia int;
    
        set ano_atual = year(curdate());
        set mes_atual = month( curdate());
        set dia_atual = day( curdate());
    
        set ano = year( data_nascimento );
        set mes = month( data_nascimento );
        set dia = day( data_nascimento );
    
        set idade = ano_atual - ano;
    
        if( mes > mes_atual ) then
                set idade = idade - 1;
        end if;
    
        if( mes = mes_atual and dia > dia_atual ) then
                set idade = idade - 1;
        end if;
    
        return idade;
    end|
    
    delimiter ;
    

    이제, 당신은 날로부터 나이를 얻을 수 있습니다 :

    select getIdade('1983-09-16');
    

    당신이 날짜 형식을 Y-m-D의 H 인 경우 : 내가 : S, 당신은이 작업을 수행 할 수

    select getIdade(substring_index('1983-09-16 23:43:01', ' ', 1));
    

    당신은 어디에서나이 기능을 다시 사용할 수 있습니다)

  12. ==============================

    12.나는 기능이 방법을 사용하여 선호합니다.

    나는 기능이 방법을 사용하여 선호합니다.

    DELIMITER $$ DROP FUNCTION IF EXISTS `db`.`F_AGE` $$
        CREATE FUNCTION `F_AGE`(in_dob datetime) RETURNS int(11)
            NO SQL
        BEGIN
           DECLARE l_age INT;
           IF DATE_FORMAT(NOW(  ),'00-%m-%d') >= DATE_FORMAT(in_dob,'00-%m-%d') THEN
              -- This person has had a birthday this year
              SET l_age=DATE_FORMAT(NOW(  ),'%Y')-DATE_FORMAT(in_dob,'%Y');
            ELSE
              -- Yet to have a birthday this year
              SET l_age=DATE_FORMAT(NOW(  ),'%Y')-DATE_FORMAT(in_dob,'%Y')-1;
           END IF;
           RETURN(l_age);
        END $$
    
        DELIMITER ;
    

    지금 사용하기

    SELECT F_AGE('1979-02-11') AS AGE; 
    

    또는

    SELECT F_AGE(date) AS age FROM table;
    
  13. ==============================

    13.어떻게 그 두 가장 단순한 방법이 있습니다 :

    어떻게 그 두 가장 단순한 방법이 있습니다 :

    1-

    select("users.birthdate",
                DB::raw("FLOOR(DATEDIFF(CURRENT_DATE, STR_TO_DATE(users.birthdate, '%Y-%m-%d'))/365) AS age_way_one"),
    

    2-

    select("users.birthdate",DB::raw("(YEAR(CURDATE())-YEAR(users.birthdate)) AS age_way_two"))
    
  14. from https://stackoverflow.com/questions/5773405/calculate-age-in-mysql-innodb by cc-by-sa and MIT license