programing

MySQL에서 두 데이터 시간 간의 차이 계산

minecode 2023. 1. 24. 08:17
반응형

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

반응형