두 날짜의 차이를 어떻게 구합니까?
MySQL 데이터베이스를 사용하여 두 날짜의 차이를 알고 싶습니다.
예를 들어 다음과 같습니다.
- 2011-07-20 - 2011-07-18 => 0년
- 2011-07-20 - 2010-07-20 => 1년
- 2011-06-15 - 2008-04-11 =>
2개3년 - 2011-06-11 - 2001-10-11 => 9년
SQL 구문은 어떻습니까?결과를 내기 위해 MySQL에서 내장된 기능이 있습니까?
윤년에 해당하는 표현은 다음과 같습니다.
YEAR(date1) - YEAR(date2) - (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d'))
이것은 이 표현에 적합하기 때문에(DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d'))이truedate1이 date2보다 "year"인 경우 mysql에서는true = 1그리고.false = 0따라서 조정은 단순히 비교의 "진실"을 빼는 문제일 뿐이다.
이것은 테스트 #3을 제외하고 테스트 케이스에 대한 정확한 값을 제공합니다. 테스트 #1과 일치하려면 "3"이 되어야 한다고 생각합니다.
create table so7749639 (date1 date, date2 date);
insert into so7749639 values
('2011-07-20', '2011-07-18'),
('2011-07-20', '2010-07-20'),
('2011-06-15', '2008-04-11'),
('2011-06-11', '2001-10-11'),
('2007-07-20', '2004-07-20');
select date1, date2,
YEAR(date1) - YEAR(date2)
- (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d')) as diff_years
from so7749639;
출력:
+------------+------------+------------+
| date1 | date2 | diff_years |
+------------+------------+------------+
| 2011-07-20 | 2011-07-18 | 0 |
| 2011-07-20 | 2010-07-20 | 1 |
| 2011-06-15 | 2008-04-11 | 3 |
| 2011-06-11 | 2001-10-11 | 9 |
| 2007-07-20 | 2004-07-20 | 3 |
+------------+------------+------------+
Bohemian의 솔루션도 좋지만 timestampdiff를 사용하면 어떨까?
select date1, date2,timestampdiff(YEAR,date2,date1) from so7749639
더 쉬워보여요
mysql> SELECT FLOOR(DATEDIFF('2011-06-11','2001-10-11')/365);
+------------------------------------------------+
| FLOOR(DATEDIFF('2011-06-11','2001-10-11')/365) |
+------------------------------------------------+
| 9 |
+------------------------------------------------+
1 row in set (0.00 sec)
DATIFF()는 두 날짜 간의 차이를 일 단위로 반환합니다.이것은 특별히 윤년을 고려하지는 않지만 다음과 같은 경우에 효과가 있을 수 있습니다.
mysql> SELECT FLOOR(DATEDIFF('2007-07-11','2004-07-11')/365);
+------------------------------------------------+
| FLOOR(DATEDIFF('2007-07-11','2004-07-11')/365) |
+------------------------------------------------+
| 3 |
+------------------------------------------------+
1 row in set (0.00 sec)
간단한 방법:SELECT TIMESTAMPDIFF(YEAR, date1, date2) AS difference FROM table.
당신은 그냥 사용할 수 있다
SELECT ROUND((TO_DAYS(date2) - TO_DAYS(date1)) / 365) ...
포장도 같이 해 주세요.ABS()다른 날짜보다 앞쪽에 있는 날짜에 관계없이 항상 양수를 원할 경우.
와 함께ROUND()0.6년은 1년으로 간주됩니다.대신 전체 연도만 계산하려면 다음을 사용할 수 있습니다.FLOOR()이 경우 0.6년은 0년으로, 1.9년은 1년으로 간주됩니다.
date1과 date2 사이의 연도 수:
IF((YEAR(date2) - YEAR(date1)) > 0, (YEAR(date2) - YEAR(date1)) - (MID(date2, 6, 5) <
MID(date1, 6, 5)), IF((YEAR(date2) - YEAR(date1)) < 0, (YEAR(date2) - YEAR(date1)) +
(MID(date1, 6, 5) < MID(date2, 6, 5)), (YEAR(date2) - YEAR(date1))))
이제 이들에 대한 몇 가지 의견을 말씀드리겠습니다.
이러한 결과는 년, 월 및 일 수를 정수로 반환합니다.그것들은 "바닥"이다.따라서 1.4일은 1일, 13.9년은 13년으로 표시됩니다.마찬가지로 -1.4년은 -1년으로 표시되고 -13.9개월은 -13개월로 표시됩니다.
대부분의 경우 부울식을 사용합니다.부울식은 0 또는 1로 평가되므로 조건에 따라 합계에서 1을 빼거나 더하는 데 사용할 수 있습니다.
이는 윤년을 감안하더라도 잘 작동합니다.
select floor((cast(date_format('2016-02-14','%Y%m%d') as int) - cast(date_format('1966-02-15','%Y%m%d') as int)/10000);
대부분의 경우 소수점 이하가 틀리기 때문에 바닥을 유지합니다.
언급URL : https://stackoverflow.com/questions/7749639/how-to-get-the-difference-in-years-from-two-different-dates
'programing' 카테고리의 다른 글
| vuej의 tslint 오류를 자동 수정하려면 어떻게 해야 합니까? (0) | 2022.11.10 |
|---|---|
| 엔티티 프레임워크 6에 MySQL 연결을 사용할 수 없습니다. (0) | 2022.11.10 |
| Java에서의 Log4J 출력 디세이블화 (0) | 2022.11.05 |
| MariaDB가 시작되지 않음: "플러그인 'FEEDB'ACK'는 디세이블입니다. (0) | 2022.11.05 |
| Java에서 여러 수신인에게 메일 보내기 (0) | 2022.11.05 |