본문으로 바로가기

MySQL 10년치 날짜 데이터 생성

category 코딩/SQL_Query 2024. 1. 26. 17:25

목적

아래처럼 존재하는 데이터를

 

d best
2026-01-01 apple
2026-01-03 orange
2026-01-04 lemon
2023-01-08 apple

 

아래처럼 보여주고자 하는 경우, 미리 모든 날짜가 기록된 테이블을 생성해 두면 편리하다.

이 작업을 프로시저 없이 진행하는 방법.

 

d best
2026-01-01 apple
2026-01-02  
2026-01-03 orange
2023-01-04 lemon
2023-01-05  
2023-01-06  
2023-01-07  
2023-01-08 apple

 

작업

반복문을 대체할 테이블 생성

loop를 수행하려면 프로시저를 사용해야 하지만, 아래와 같은 테이블로 대체할 수 있다.

create table t (n int);

insert into t values (1);

insert into t select * from t; -- *2 씩 늘어나므로 10번 수행하면 4096 row 생성

 

단순히 아래와 같은 row가 4096개 생성된다.

 

t
1
1
...(생략)...

 

필요한만큼 날짜 데이터 생성

10년치 날짜가 존재하는 date_t 라는 테이블을 생성한다.

CREATE TABLE date_t (d DATE); -- 날짜를 저장할 테이블

INSERT INTO date_t
	SELECT d FROM (
		SELECT @rnum:=@rnum+1 AS rownum, DATE(ADDDATE('2026-01-01', INTERVAL @rnum DAY)) AS d
		FROM (SELECT @rnum:=-1) r, t
	) t WHERE YEAR(d) < 2036;

 

결과

 

d
2026-01-01
2026-01-02
2026-01-03
...(생략)...
2035-12-30
2035-12-31

 

이제 date_t 테이블과 실제 데이터가 존재하는 테이블을 LEFT / RIGHT JOIN 하면 목적한대로 데이터를 읽어올 수 있다.