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

MySQL에서 생성 시점의 타임스탬프가 포함된 CSV 파일로 데이터 내보내는 방법

데이터를 내보낼 때 파일이 생성된 시점의 타임스탬프가 파일 이름에 자동으로 포함되도록 하고 싶은 경우가 종종 있습니다. 예를 들어 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()으로 경로·접두사·타임스탬프·확장자를 조합해 동적 쿼리를 작성한다.
  • PREPAREEXECUTE로 해당 쿼리를 실행한다.

이 방법을 활용하면 백업 작업이나 정기적인 데이터 추출 시 파일이 서로 겹치지 않아 데이터 관리가 훨씬 수월해집니다.