데이터를 내보낼 때 파일이 생성된 시점의 타임스탬프가 파일 이름에 자동으로 포함되도록 하고 싶은 경우가 종종 있습니다. 예를 들어 student_2017_12_10_18_52_46.CSV처럼 말입니다. 이렇게 하면 여러 번 내보낸 파일들이 서로 덮어써지지 않고 관리하기 편리합니다.
MySQL에서는 준비된 문(Prepared Statement)과 CONCAT() 함수를 조합하면 이를 손쉽게 구현할 수 있습니다. 아래 예제를 통해 그 방법을 살펴보겠습니다.
예제: student_info 테이블을 타임스탬프가 포함된 CSV 파일로 내보내기
다음 쿼리들은 student_info 테이블의 데이터를 파일 이름에 타임스탬프가 포함된 CSV 파일로 내보냅니다.
1단계: 타임스탬프 값 생성
mysql> SET @time_stamp = DATE_FORMAT(NOW(),'_%Y_%m_%d_%H_%i_%s'); Query OK, 0 rows affected (0.00 sec)
NOW()로 현재 시각을 가져온 뒤, DATE_FORMAT()을 사용해 연도, 월, 일, 시, 분, 초 형식의 문자열로 변환합니다.
2단계: 저장 경로, 접두사, 확장자 설정
mysql> SET @FOLDER = 'C:/mysql/bin/mysql-files/'; Query OK, 0 rows affected (0.00 sec) mysql> SET @PREFIX = 'Student15'; Query OK, 0 rows affected (0.00 sec) mysql> SET @EXT = '.CSV'; Query OK, 0 rows affected (0.00 sec)
- @FOLDER: CSV 파일이 저장될 폴더 경로입니다. 경로 끝에 슬래시(/)를 반드시 붙여야 합니다.
- @PREFIX: 파일 이름 앞부분에 붙일 접두사입니다.
- @EXT: 파일 확장자입니다.
3단계: 동적 쿼리 문자열 작성
mysql> SET @Command = CONCAT("SELECT * FROM Student_info INTO OUTFILE '",@FOLDER, @PREFIX, @time_stamp, @EXT,"' FIELDS ENCLOSED BY '\"' TERMINATED BY ';'
ESCAPED BY '\"'"," LINES TERMINATED BY '\r\n';");
Query OK, 0 rows affected (0.00 sec)CONCAT() 함수를 이용해 폴더 경로, 접두사, 타임스탬프, 확장자를 하나의 완전한 파일 경로로 조합하고, 이를 INTO OUTFILE 구문이 담긴 SELECT 쿼리 문자열로 만듭니다.
4단계: 준비된 문 생성 및 실행
mysql> PREPARE stmt FROM @command; Query OK, 0 rows affected (0.00 sec) Statement prepared mysql> execute stmt; Query OK, 6 rows affected (0.07 sec)
PREPARE 문으로 위에서 만든 쿼리 문자열을 준비한 후, EXECUTE로 실행하면 실제 파일이 생성됩니다.
실행 결과 확인
위 쿼리를 실행하면 student_2017_12_10_18_52_46.CSV라는 이름의 CSV 파일이 생성됩니다. 즉, 실행 당시의 날짜와 시간이 파일 이름에 그대로 반영됩니다. 생성된 파일의 내용은 다음과 같습니다.
101;"YashPal";"Amritsar";"History" 105;"Gaurav";"Chandigarh";"Literature" 125;"Raman";"Shimla";"Computers" 130;"Ram";"Jhansi";"Computers" 132;"Shyam";"Chandigarh";"Economics" 133;"Mohan";"Delhi";"Computers"
정리
이 방식의 핵심은 다음과 같습니다.
DATE_FORMAT(NOW(), ...)으로 현재 시각 기반의 고유한 파일 이름을 만든다.CONCAT()으로 경로·접두사·타임스탬프·확장자를 조합해 동적 쿼리를 작성한다.PREPARE와EXECUTE로 해당 쿼리를 실행한다.
이 방법을 활용하면 백업 작업이나 정기적인 데이터 추출 시 파일이 서로 겹치지 않아 데이터 관리가 훨씬 수월해집니다.