Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 'X일 전' 타임스탬프를 가진 행을 삽입하는 방법

MySQL에서 현재 시점으로부터 임의의 'X일 전'에 해당하는 타임스탬프 값을 가진 행을 삽입하려면 CURRENT_TIMESTAMPINTERVAL을 조합하여 사용하면 됩니다.

기본 문법

아래와 같은 구문을 사용하면, 현재 시각에서 무작위로 계산된 일수만큼 이전의 날짜가 자동으로 입력됩니다.

insert into yourTableName values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY);

여기서 RAND()는 0과 1 사이의 난수를 생성하고, 여기에 100을 곱한 뒤 ABS()로 절댓값을 취해 0~100일 범위의 값이 만들어집니다. 즉, 실행할 때마다 최대 100일 전까지의 무작위 과거 날짜가 기록됩니다.

실습: 테이블 생성하기

먼저 예제로 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable1983
    (
    DueDate timestamp
    );
Query OK, 0 rows affected (0.00 sec)

데이터 삽입하기

INSERT 명령어를 사용해 위에서 설명한 방식으로 레코드를 여러 개 삽입합니다.

mysql> insert into DemoTable1983 values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1983 values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1983 values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY);
Query OK, 1 row affected (0.00 sec)

결과 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1983;

실행 결과는 다음과 같습니다.

+---------------------+
| DueDate             |
+---------------------+
| 2019-12-10 19:35:43 |
| 2019-10-27 19:35:44 |
| 2019-11-10 19:35:45 |
+---------------------+
3 rows in set (0.00 sec)

삽입된 세 개의 날짜가 서로 다른 것을 확인할 수 있습니다. 이는 각 INSERT 실행 시점마다 RAND()가 새로운 난수를 생성했기 때문입니다.

현재 시각과 비교하기

참고로 현재 날짜와 시간은 아래 쿼리로 확인할 수 있습니다.

mysql> select now();

실행 결과는 다음과 같습니다.

+---------------------+
| now()               |
+---------------------+
| 2019-12-18 19:36:17 |
+---------------------+
1 row in set (0.00 sec)

현재 시각인 2019년 12월 18일과 비교하면, 삽입된 데이터들이 각각 약 8일 전, 52일 전, 38일 전에 해당한다는 것을 알 수 있습니다. 이처럼 CURRENT_TIMESTAMP - INTERVAL ... DAY 패턴을 활용하면 테스트 데이터나 샘플 데이터를 손쉽게 생성할 수 있습니다.