MySQL 테이블을 CSV 파일로 내보내기
CSV 파일로 꺼내야 하는 MySQL 테이블이 있습니다.제가 사용한 쿼리는
SELECT "ID","NAME","SALARY","SAL1","SAL2","SAL3","SAL4","SAL5","SAL6","SAL7","SAL8","SAL9","SAL10","SAL11","SAL12","SAL13","SAL14","SAL15","SAL16","SAL17","SAL18","SAL19","SAL20","SAL21","SAL22","SAL23","SAL24","SAL25","SAL26"
UNION ALL
SELECT *
FROM addstock25
INTO OUTFILE "E:\\JOSE DATA\\addstock7.csv"
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
이 쿼리는 작동하지만 200개의 열 이름이 있으면 어떻게 합니까?수동으로 입력하지 않고 할 수 있는 방법이 있습니까?
이 명령은 사용자가 원하는 것을 거의 제공하며 원격 서버에서도 작동합니다.유일한 경고는 TSV 파일을 생성한다는 것입니다(필드는 탭으로 구분됨).
mysql mydb -e "select * from mytable" -B > mytable.tsv
그러나 다음 답변에서 제안한 대로 sed를 사용하여 CSV로 변환할 수 있습니다.
mysql mydb -e "select * from mytable" -B | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > mytable.csv
DESCRIBE addstock25;
첫 번째 열과 해당 열의 처음 세 개 항목을 제거합니다(사용 용도에 따라 다름).addstock25에서 필드 목록을 얻을 수 있습니다.
코어에서 파생된 가상 테이블을 사용하는 필드 이름만 가져옵니다.호출된 정보 스키마입니다.
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_NAME`='foo';
이 쿼리의 이름이 sq_fieldnamelist라고 가정합니다.
따라서 위의 표에는 하나의 열이 있고 "foo" 표의 필드 이름이 있습니다.
이렇게 직접적으로 쓴다면,
SELECT (sq_fieldnamelist)
UNION ALL
SELECT *
FROM addstock25
INTO OUTFILE "E:\\JOSE DATA\\addstock7.csv"
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n
MySQL에서 오류가 발생합니다."하위 쿼리가 여러 행을 반환함"
sq_fieldnamelist를 편집하여 모든 항목을 쉼표로 구분하여 뒤로 연결해야 합니다.
Select GROUP_CONCAT(COLUMN_NAME)
FROM
(SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_NAME`='ffd_companies'
LIMIT 3,100
) AS fafa
GROUP BY 'COLUMN_NAME' // This group by is just to make group concatenation work
sq_fieldnamelist2라고 가정합니다.
이렇게 sq_fieldnamelist를 편집하면 쉼표로 구분된 필드 이름 중 하나의 값만 반환됩니다.이제 이 하위 쿼리를 선택 문에 입력하여 필요한 필드를 가져올 수 있습니다.
SELECT (sq_fieldnamelist2)
UNION ALL
SELECT *
FROM addstock25
INTO OUTFILE "E:\\JOSE DATA\\addstock7.csv"
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n
sq_fieldnamelist2의 LIMIT 3,100을 자신의 목적에 맞게 편집해야 합니다.
테이블이 fil1, fil2와 같다고 가정해 보겠습니다.filN, sal1, sal2, sal3..., salI.급여 필드만 보려면 다음을 사용해야 합니다.LIMIT N, x > I+N
모두 보려면 다음을 사용합니다.LIMIT 0, x > N+I
.
당신이 왜 못하는지 모르겠어요
SELECT *
FROM addstock25
INTO OUTFILE "E:\\JOSE DATA\\addstock7.csv"
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
당신은 이런 것을 찾고 있는 것 같습니다.
SET @sql = NULL;
SELECT GROUP_CONCAT("'",COLUMN_NAME,"'")
FROM
(SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'yourdatabasename'
and `TABLE_NAME`='ffd_companies'
) AS colnames
GROUP BY 'COLUMN_NAME'
into @sql;
SET @sql = concat ("SELECT", @sql, " from dual
UNION ALL
SELECT *
FROM addstock25
INTO OUTFILE 'E:\\JOSE DATA\\addstock7.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '", '"',"'
)"
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
참고로 다음을 추가했습니다.WHERE
절TABLE_SCHEMA
'데이터베이스 이름'입니다.
'Table Data Export Wizard'를 사용하여 선택한 SQL을 복사할 수 있습니다.
언급URL : https://stackoverflow.com/questions/22783202/exporting-a-mysql-table-into-a-csv-file
'programing' 카테고리의 다른 글
요소가 뷰포트에 보이는지 쿼리 확인 (0) | 2023.09.10 |
---|---|
nodejs를 사용하여 기본 브라우저를 열고 특정 URL로 이동하는 방법 (0) | 2023.09.10 |
VBA에서 HTML 전자 메일 본문 글꼴 유형 및 크기 변경 (0) | 2023.09.05 |
Spring Session Attributes 테이블 이름은 대소문자를 구분합니다. (0) | 2023.09.05 |
부트스트랩 열이 여러 행에 걸쳐지도록 하려면 어떻게 해야 합니까? (0) | 2023.09.05 |