source

Mysql 쿼리 결과를 Excel로 내보내시겠습니까?

nicesource 2022. 11. 15. 21:37
반응형

Mysql 쿼리 결과를 Excel로 내보내시겠습니까?

내 요구 사항은 질의의 전체 결과를 저장하는 것이다.

SELECT * FROM document 
WHERE documentid IN (SELECT * FROM TaskResult WHERE taskResult = 2429)

Excel 파일로 변환합니다.

이를 실현하는 일반적인 방법은 CSV로 내보낸 후 CSV를 Excel로 로드하는 것입니다.
MySQL 명령줄 도구를 사용하여 이 작업을 수행할 수 있습니다.INTO OUTFILE에 대한 조항SELECT스테이트먼트:

SELECT ... FROM ... WHERE ... 
INTO OUTFILE 'file.csv'
FIELDS TERMINATED BY ','

자세한 옵션에 대해서는, 이 링크를 참조해 주세요.

또는 mysqldump를 사용하여 --tab 옵션을 사용하여 덤프를 구분된 값 형식으로 저장할 수 있습니다.링크를 참조하십시오.

mysqldump -u<user> -p<password> -h<host> --where=jtaskResult=2429 --tab=<file.csv> <database> TaskResult

힌트: absoulte 경로를 지정하지 않고 다음과 같은 것을 사용하는 경우INTO OUTFILE 'output.csv'또는INTO OUTFILE './output.csv'출력 파일이 에 의해 지정된 디렉토리에 저장됩니다.show variables like 'datadir';.

좋은 예로는 join이 있는 경우 또는 close가 있는 경우 쿼리 종료 후 기입이 필요할 수 있습니다.

 select 'idPago','fecha','lead','idAlumno','idTipoPago','idGpo'
 union all
(select id_control_pagos, fecha, lead, id_alumno, id_concepto_pago, id_Gpo,id_Taller,
id_docente, Pagoimporte, NoFactura, FacturaImporte, Mensualidad_No, FormaPago,
Observaciones from control_pagos
into outfile 'c:\\data.csv' 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n');

다음 쿼리를 사용합니다.

 SELECT * FROM document INTO OUTFILE 'c:/order-1.csv' FIELDS TERMINATED BY ','  
 ENCLOSED BY '"' LINES TERMINATED BY '\n';

제 경우 sql 결과를 클라이언트 측 파일에 덤프해야 합니다.이는 데이터베이스에서 데이터를 오프로드하는 가장 일반적인 사용 사례입니다.대부분의 경우 서버에 액세스할 수 없거나 서버에 결과를 쓰고 싶지 않습니다.

mysql -h hostname -u username -ppwd -e "mysql simple sql statement that last for less than a line" DATABASE_NAME > outputfile_on_the.client

이 문제는 복잡한 쿼리가 여러 줄 동안 지속되면 발생합니다.명령줄을 사용하여 결과를 파일에 쉽게 덤프할 수 없습니다.이 경우 복잡한 쿼리를 longquery_file.sql 등의 파일에 넣은 후 명령을 실행할 수 있습니다.

mysql -h hn -u un -ppwd < longquery_file.sql DBNAME > output.txt

이건 나한테 효과가 있었어.유일한 어려움은 탭 문자입니다.group_cancat(foo SEPERATOR 0x09)에 사용하는 경우 출력 파일에 '\t'로 표시됩니다.0x09 문자는 ASCII TAB 입니다.그러나 이 문제는 SQL 결과를 파일로 덤프하는 방법에는 해당되지 않습니다.제 호출기와 관련된 것일 수도 있어요.이 문제에 대한 답을 찾으면 알려주세요.이 투고를 갱신합니다.

mysql 출력을 파일로 내보내기 위해 사용하는 빠르고 더러운 방법은 다음과 같습니다.

$mysql <file_name> --tee=<file_path>

그런 다음 내보낸 출력을 사용합니다( 참조).<file_path>내가 원하는 곳이면 어디든.

데이터베이스 실행을 피하기 위해서는 이 방법밖에 없습니다.secure-file-privoption, 이 옵션을 사용하면,INTO OUTFILE이전 답변에서 제시된 내용:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

위해서SHOW DATABASES그리고.SHOW TABLES

이 문제는 문제삼지 않을 것이다.

이 경우 다음을 수행할 수 있습니다.

  1. SHOW DATABASES
mysql -u <user> -p <password> -e 'SHOW DATABASES' > <path_to_file>
  1. SHOW TABLES
mysql -u <user> -p <password> -e 'SHOW TABLES FROM <db_name>' > <path_to_file>

힌트:-e는 flag의 입니다.execute

참고 자료:

경우에는 ★★★★★★★★★★★★★★★★★★★★★★★★★.INTO OUTFILEMySQL 사용자가 로그인한 사용자와 다르기 때문에 작동하지 않았습니다.또한 질의량이 너무 커서 인라인 배리언트를 사용할 수 없었습니다.

이걸 쓰게 됐는데 훨씬 쉬웠어요.CSV 또는 출력을 지원하지 않을 수 있지만, 이대로 출력이 필요한 경우 이 방법이 작동합니다.

mysql> tee /tmp/my.out;

출처 : https://alvinalexander.com/mysql/how-save-output-mysql-query-file/

이것은 오래된 질문이지만, 여전히 구글의 첫 번째 결과 중 하나이다.가장 빠른 방법은 ODBC 쿼리 또는 MySQL For Excel을 사용하여 MySQL을 Excel에 직접 링크하는 것입니다.후자는 OP 코멘트에서 언급되었지만, CSV로의 수출은 가장 효율적인 방법이 아니기 때문에 스스로 대답할 만하다고 느꼈습니다.

ODBC 쿼리 - 설정이 조금 더 복잡하지만 훨씬 더 유연합니다.예를 들어 MySQL For Excel 추가 기능에서는WHERE명령어를 지정합니다.이 방법의 유연성으로 인해 데이터를 보다 복잡한 방법으로 사용할 수도 있습니다.

MySQL For Excel - 쿼리로 복잡한 작업을 수행할 필요가 없거나 작업을 빠르고 쉽게 수행해야 하는 경우 이 추가 기능을 사용합니다.데이터베이스에서 보기를 만들어 쿼리 제한 중 일부를 해결할 수 있습니다.

언급URL : https://stackoverflow.com/questions/10295228/exporting-results-of-a-mysql-query-to-excel

반응형

'source' 카테고리의 다른 글

java.exe와 javaw의 차이.실행  (0) 2022.11.15
쿼리 문자열을 배열로 구문 분석  (0) 2022.11.15
MySQL의 "주요 효율성"이란  (0) 2022.11.14
계산 필드를 vuex-map-fields로 매핑합니다.  (0) 2022.11.14
변수 작성 방법  (0) 2022.11.14