MySQL에서 두 데이터 시간 간의 차이 계산
마지막 로그인 시간을 MySQL에 저장하고 있습니다.datetime
-type 파일.사용자가 로그인할 때 마지막 로그인 시간과 현재 시간(사용하는 시간)의 차이를 알고 싶다.NOW()
).
계산은 어떻게 해요?
USE MySQL 함수.예를 들어 다음과 같이 할 수 있습니다.
SELECT TIMESTAMPDIFF(SECOND, '2012-06-06 13:13:55', '2012-06-06 15:20:18')
이 경우 의 세 번째 파라미터는TIMSTAMPDIFF
함수는 현재 로그인 시간이 됩니다(NOW()
). 두 번째 파라미터는 데이터베이스에 이미 존재하는 마지막 로그인 시간이 됩니다.
논리에 대한 나의 의견:
구문은 "old date" - :"new date"이므로 다음과 같습니다.
SELECT TIMESTAMPDIFF(SECOND, '2018-11-15 15:00:00', '2018-11-15 15:00:30')
30을 주고,
SELECT TIMESTAMPDIFF(SECOND, '2018-11-15 15:00:55', '2018-11-15 15:00:15')
제공: -40
시작 날짜와 종료 날짜가 다른 경우 TIMEDIFF를 사용합니다.
SELECT TIMEDIFF(datetime1,datetime2)
datetime1 > datetime2일 경우
SELECT TIMEDIFF("2019-02-20 23:46:00","2019-02-19 23:45:00")
제공: 24:01:00
및 datetime1 < datetime 2
SELECT TIMEDIFF("2019-02-19 23:45:00","2019-02-20 23:46:00")
제공: -24:01:00
나는 받아들여진 답변이 적절하지 않다고 생각한다.예를 들어, 마지막 로그인 시간과 현재 시간의 차이가 8시간인 경우, 그 차이를 초단위로 얻는 것은 비논리적입니다.올바른 형식은 시간, 분 및 초입니다.저는 이것을 다음과 같이 설명했습니다.
여기, 테이블을 만듭니다.login_info
테이블에서 사용자의 로그인 정보를 저장합니다.
CREATE TABLE login_info (
-> user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
-> last_login DATETIME NOT NULL,
-> PRIMARY KEY (user_id)
-> );
그런 다음 임의의 값을 사용하여 테이블을 채웁니다.
INSERT INTO login_info (last_login) VALUES
-> ("2021-09-22 09:32:44"),
-> ("2021-09-22 13:02:57"),
-> ("2021-09-21 23:43:21"),
-> ("2021-09-22 04:43:39"),
-> ("2021-09-22 17:23:21");
여기서 last_login과 current_time의 차이를 다음과 같이 계산합니다.
CREATE TABLE login_dur_in_sec AS
-> SELECT user_id,
-> TIMESTAMPDIFF(SECOND, last_login, NOW()) AS diff
-> FROM login_info;
SELECT * FROM login_dur_in_sec;
+---------+-------+
| user_id | diff |
+---------+-------+
| 1 | 28580 |
| 2 | 15967 |
| 3 | 63943 |
| 4 | 45925 |
| 5 | 343 |
+---------+-------+
CREATE TABLE hour_section AS
-> SELECT user_id,
-> FLOOR (diff / 3600) AS hour_part
-> FROM login_dur_in_sec;
CREATE TABLE minute_section AS
-> SELECT user_id,
-> FLOOR (MOD (diff, 3600)/ 60) AS minute_part
-> FROM login_dur_in_sec;
CREATE TABLE second_section AS
-> SELECT user_id,
-> MOD (MOD (diff, 3600), 60) AS second_part
-> FROM login_dur_in_sec;
CREATE TABLE login_dur AS
-> SELECT h.user_id, h.hour_part, m.minute_part, s.second_part
-> FROM hour_section AS h INNER JOIN minute_section AS m
-> ON h.user_id = m.user_id
-> INNER JOIN second_section AS s
-> ON m.user_id = s.user_id;
CREATE TABLE login_dur_trunc AS
-> SELECT user_id,
-> CONCAT (hour_part, ":", minute_part, ":", second_part) AS login_duration
-> FROM login_dur;
SELECT * FROM login_dur_trunc;
+---------+----------------+
| user_id | login_duration |
+---------+----------------+
| 1 | 8:14:46 |
| 2 | 4:44:33 |
| 3 | 18:4:9 |
| 4 | 13:3:51 |
| 5 | 0:24:9 |
+---------+----------------+
여기서 @Adi의 답변은 @CaiusJard가 지적한 것처럼 항상 효과가 있는 것은 아닙니다.
언급URL : https://stackoverflow.com/questions/10907750/calculate-difference-between-two-datetimes-in-mysql
'programing' 카테고리의 다른 글
MySQL InnoDB가 테이블에서 데이터 행을 삭제한 후 디스크 공간을 해제하지 않음 (0) | 2023.01.24 |
---|---|
if-statement 내부에 변수 값 할당 (0) | 2023.01.24 |
JavaScript에서 큰 숫자에 대한 과학적 표기법을 피하는 방법은 무엇입니까? (0) | 2023.01.24 |
커스텀 리스트 Android의 아이템에 대한 클릭 문제 표시 (0) | 2023.01.24 |
Selenium - 페이지가 완전히 로드될 때까지 기다리는 방법 (0) | 2023.01.14 |