MySQL 달력 테이블 생성 방법
토이 프로젝트 진행 중 데이터 생성 시 해당 날짜의 특정 휴무 여부 등등 체크가 필요하므로 달력 테이블 생성이 필요했습니다.
MySQL 생성법을 찾아본 뒤 사용 DB인 H2로 변환해서 사용했습니다.
아래는 생성을 위한 쿼리문입니다.
달력 테이블 관리를 위한 컬럼은 추가, 삭제가 필요합니다.
-- 달력 생성을 위한 임시 테이블 T
CREATE TABLE T (N INT);
INSERT INTO T VALUES (1);
-- 아래 INSERT 문을 반복하면 행이 생성된다.
-- 10년치 데이터는 3650일 가량 되므로 13번 반복한다(4096행)
INSERT INTO T SELECT * FROM T;
-- 실질적으로 날짜를 저장할 테이블이다.
CREATE TABLE CM_CLDR(
DE DATE, -- 일자
DWK INT, -- 요일
DS CHAR(10), --일자 문자
);
-- CM_CLDR 테이블에 T 테이블을 이용해 데이터 생성 2021년 ~ 2030년
INSERT INTO CM_CLDR
SELECT DE
,DAYOFWEEK(DE) AS DWK -- 요일을 숫자로 표현 일요일 1 ~ 토요일 7
,DATE_FORMAT(DE, %Y-%m-%d) AS DS -- 날짜 형식을 2021-07-26 로 변경
FROM (
SELECT @RNUM:=@RNUM+1 AS ROWNUM
,DATE(DATE_ADD('2021-01-01', INTERVAL @RNUM DAY)) AS DE
FROM ( SELECT @RNUM:=-1) R, T
) T
WHERE YEAR(DE) < 2031;