[SQL] 어떻게 두 개의 서로 다른 날짜에서 년의 차이를 얻으려면?
SQL어떻게 두 개의 서로 다른 날짜에서 년의 차이를 얻으려면?
나는 MySQL 데이터베이스를 사용하여 두 개의 다른 날짜에서 년의 차이를 싶어.
예를 들어 :
어떻게 SQL 구문에 대한? 거기에 어떤 결과를 생산하기 위해 MySQL의에서 기능이 내장되어 있습니까?
해결법
-
==============================
1.여기에 또한 윤년를 충족시켜 표현이다 :
여기에 또한 윤년를 충족시켜 표현이다 :
YEAR(date1) - YEAR(date2) - (DATE_FORMAT(date1, '%m%d') < DATE_FORMAT(date2, '%m%d'))
날짜 1은 진정한 = MySQL은 날짜 2보다 때문에 "연초"인 경우,이 발현하기 때문에 작업 (DATE_FORMAT (날짜 1은 '%의 m %의 D')
이 테스트 # 3를 제외하고, 테스트 케이스에 대한 올바른 값을 제공합니다 - 나는 그것을 "3"해야한다고 생각 테스트 # 1과 일치하도록 :
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 | +------------+------------+------------+
참조 SQLFiddle
-
==============================
2.나는 TIMESTAMPDIFF 사용에 대한 보헤미안하여 솔루션,하지만 좋아
나는 TIMESTAMPDIFF 사용에 대한 보헤미안하여 솔루션,하지만 좋아
select date1, date2,timestampdiff(YEAR,date2,date1) from so7749639
sqlfiddle
더욱 쉬워 보인다.
-
==============================
3.
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)
DATEDIFF ()는 두 날짜 사이의 일의 차이를 반환합니다. 이것은 특히 계정으로 윤년을 고려하지 않고 그러한 경우에 작동 할 수 있습니다 :
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)
-
==============================
4.간단히의 : 테이블에서 차이 AS SELECT TIMESTAMPDIFF (년, 날짜 1, 날짜 2).
간단히의 : 테이블에서 차이 AS SELECT TIMESTAMPDIFF (년, 날짜 1, 날짜 2).
-
==============================
5.당신은 사용할 수 있습니다
당신은 사용할 수 있습니다
SELECT ROUND((TO_DAYS(date2) - TO_DAYS(date1)) / 365) ...
또한 ABS () 당신은 항상 양수, 날짜 선행 다른 상관없이 원하는 경우에 그것을 포장.
대신 당신은 단지 전체 년을 계산하려면 라운드 (), 0.6 년, 1 년으로 간주됩니다, 당신은 FLOOR ()을 사용할 수 있습니다. 이 경우 0.6 년 0 년으로 간주되며, 1.9 년 1 년 간주됩니다.
-
==============================
6.날짜 1과 날짜 2 년 사이의 수 :
날짜 1과 날짜 2 년 사이의 수 :
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))))
이제 이들에 대한 몇 가지 의견.
-
==============================
7.이 윤년에 대한 계정에 복용, 잘 작동합니다 :
이 윤년에 대한 계정에 복용, 잘 작동합니다 :
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);
소수가 대부분의 시간을 잘못 될 것 같은 바닥을 유지합니다.
from https://stackoverflow.com/questions/7749639/how-to-get-the-difference-in-years-from-two-different-dates by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] PostgreSQL의 선택 쿼리의 열 최대 번호는 무엇입니까 (0) | 2020.03.30 |
---|---|
[SQL] java.sql.SQLException의 : 지친 결과 집합 (0) | 2020.03.30 |
[SQL] SQL : 결과 행을 여러 번, 그리고 수 행을 반복 (0) | 2020.03.30 |
[SQL] SQL에서 곱셈 집계 연산자 (1) | 2020.03.30 |
[SQL] SQL Server는 날짜 시간에 대 Varchar로 변환 (0) | 2020.03.30 |