답변:
[정보] 무엇 DATEDIFF의 기능?
매뉴얼 페이지 인용 :
DATEDIFF ()는 expr1 – expr2를 한 날짜에서 다른 날짜로 일 단위로 값으로 표시합니다. expr1 및 expr2는 날짜 또는 날짜 및 시간 표현식입니다. 값의 날짜 부분 만 계산에 사용됩니다.
귀하의 경우에는 다음을 사용하십시오.
mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
| 3 |
+--------------------------------------+
1 row in set (0,00 sec)
그러나 날짜는 님이 YYYY-MM-DD
아닌 DD-MM-YYYY
게시 로 기록해야합니다 .
datediff()
메서드 의 두 번째 인수보다 커야합니다 . 그렇지 않으면 음수 값이 반환됩니다.
2 일 사이에 24 시간 을 계산하려면 datediff가 잘못된 값을 반환 할 수 있습니다.
설명서에 따르면 :
값의 날짜 부분 만 계산에 사용됩니다.
결과
select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')
예상되는 0 대신 1을 반환합니다.
솔루션이 사용 중입니다 select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
(datediff와 반대되는 인수 순서에 유의하십시오).
몇 가지 예 :
select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
0을 반환select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
1을 반환select timestampdiff(DAY, '2016-04-13 11:00:00', now());
지금까지 2016-04-13 11:00:00 이후에 24 시간이 지난 전체 횟수를 반환합니다 .datediff가 예기치 않은 또는 잘못된 것으로 보이는 값을 반환하는 이유가 명확하지 않기 때문에 누군가에게 도움이되기를 바랍니다.
datediff()
그리고 사이에 인수가 뒤집힌다는 것이 이상합니다 timestampdiff()
.
필요한 경우 쉽게 장치를 변경할 수 있기 때문에 TIMESTAMPDIFF를 선호 합니다.
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM membership_dates md
산출::
id entity_id start_date end_date days
1 1236 2018-01-16 00:00:00 2018-08-31 00:00:00 227
2 2876 2015-06-26 00:00:00 2019-06-30 00:00:00 1465
3 3880 1990-06-05 00:00:00 2018-07-04 00:00:00 10256
4 3882 1993-07-05 00:00:00 2018-07-04 00:00:00 9130
그것이 미래에 누군가를 돕기를 바랍니다