[SQL] MySQL은 계산 나이 (이노)
SQLMySQL은 계산 나이 (이노)
내가-DD MM-YYYY를 형태로 테이블에 저장 출생의 사람 날짜가 내가 현재 날짜에서 뺄 경우, 어떤 형식으로 날짜가 반환된다?
어떻게 계산 누군가의 연령이 반환 형식을 사용할 수 있습니까?
해결법
-
==============================
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.당신은 TIMESTAMPDIFF (단위, datetime_expr1, datetime_expr2) 기능을 사용할 수 있습니다 :
당신은 TIMESTAMPDIFF (단위, datetime_expr1, datetime_expr2) 기능을 사용할 수 있습니다 :
SELECT TIMESTAMPDIFF(YEAR, '1970-02-01', CURDATE()) AS age
데모
-
==============================
3.
select *,year(curdate())-year(dob) - (right(curdate(),5) < right(dob,5)) as age from your_table
이 방법으로 당신은보다 정확한 나이 계산을하기 위해 짝수 월 출생의 일 고려한다.
-
==============================
4.
SELECT TIMESTAMPDIFF (YEAR, YOUR_COLUMN, CURDATE()) FROM YOUR_TABLE AS AGE
데모를 클릭하십시오 ..
단순하지만 우아한 ..
-
==============================
5.
select floor(datediff (now(), birthday)/365) as age
-
==============================
6.간단히:
간단히:
DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(`birthDate`)), '%Y')+0 AS age
-
==============================
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.문제는 MySQL 용 태그되고 있기 때문에, 나는 나를 위해 작동하는지 다음과 같은 구현을 가지고 있고 비슷한 대안이 다른 RDBMS의 곁에있을 것입니다 바랍니다. 여기에 SQL이다 :
문제는 MySQL 용 태그되고 있기 때문에, 나는 나를 위해 작동하는지 다음과 같은 구현을 가지고 있고 비슷한 대안이 다른 RDBMS의 곁에있을 것입니다 바랍니다. 여기에 SQL이다 :
select YEAR(now()) - YEAR(dob) - ( DAYOFYEAR(now()) < DAYOFYEAR(dob) ) as age from table where ...
-
==============================
9.간단하게 할
간단하게 할
SELECT birthdate, (YEAR(CURDATE())-YEAR(birthdate)) AS age FROM `member`
생년월일은 생년월일 이름을 유지 필드 이름입니다 ) (명령) (CURDATE을 매년로 전환 마이너스 년에 () 생년월일 필드에서
-
==============================
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.당신은 함수가 그것을 할 수 있습니다 :
당신은 함수가 그것을 할 수 있습니다 :
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.나는 기능이 방법을 사용하여 선호합니다.
나는 기능이 방법을 사용하여 선호합니다.
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.어떻게 그 두 가장 단순한 방법이 있습니다 :
어떻게 그 두 가장 단순한 방법이 있습니다 :
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"))
from https://stackoverflow.com/questions/5773405/calculate-age-in-mysql-innodb by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] WHERE 절에 별칭을 사용하여 (0) | 2020.03.22 |
---|---|
[SQL] SQL : 하나 개의 필드에 최소 값을 기준으로 그룹은 별개의 행을 선택하는 동안 (0) | 2020.03.22 |
[SQL] 오라클에서 문자열 연결 연산자는 무엇입니까? (0) | 2020.03.22 |
[SQL] 어떻게 열 (T-SQL)에서 여러 값을 반환? (0) | 2020.03.22 |
[SQL] PostgreSQL을 함께 데이터베이스 간 쿼리를 수행 할 수? (0) | 2020.03.22 |