CSV에서 SQL로 변환
CSV 파일을 놓고 데이터베이스를 고르면 CREATE TABLE과 INSERT 문이 담긴 SQL 스크립트가 만들어져요. 열마다 타입을 정하고, 모든 수정 사항을 행과 열과 함께 나열해요.
5개 행 변환, 수정 8개, 거부 없음
| 행 | ||||||
|---|---|---|---|---|---|---|
| 5 | 00412 | Peña Muñoz | Mérida | 15/02/2024 | 1.234,50 | sí |
| 6 | 00413 | José Ángel Ruiz | León | 03/02/2024 | 99,90 | no |
| 7 | 00414 | Zoë Ortíz | Querétaro | 29/02/2024 | N/A | sí |
| 8 | 00415 | Ñuño Castañeda | Oaxaca | 28/02/2024 | 7,25 | no |
| 9 | 00416 | Iñaki Olaizola | Mazatlán | 11/03/2024 | 980,75 | sí |
-- Written by IntoSQL for PostgreSQL.
SET client_encoding = 'UTF8';
BEGIN;
CREATE TABLE ventas_2024 (
folio text NOT NULL,
cliente text NOT NULL,
ciudad text NOT NULL,
fecha date NOT NULL,
importe numeric(6,2),
pagado boolean NOT NULL
);
INSERT INTO ventas_2024 (folio, cliente, ciudad, fecha, importe, pagado) VALUES
('00412', 'Peña Muñoz', 'Mérida', '2024-02-15', 1234.50, TRUE),
('00413', 'José Ángel Ruiz', 'León', '2024-02-03', 99.90, FALSE),
('00414', 'Zoë Ortíz', 'Querétaro', '2024-02-29', NULL, TRUE),
('00415', 'Ñuño Castañeda', 'Oaxaca', '2024-02-28', 7.25, FALSE),
('00416', 'Iñaki Olaizola', 'Mazatlán', '2024-03-11', 980.75, TRUE);
COMMIT;
수정 사항
- 파일이 windows‑1252 인코딩이라서 UTF-8로 변환했어요.
- 헤더는 4행에 있어요. 그 위의 행은 제외했어요.
- 10행("TOTAL")은 합계라서 제외했어요.
- "Folio" 열의 앞자리 0을 유지했어요. 00412 값은 00412 그대로 텍스트로 저장돼요.
- 15/02/2024 값을 보면 "Fecha" 열의 날짜는 일이 먼저예요. 그래서 03/02/2024 값을 2024‑02‑03 날짜로 읽어요.
- "Importe" 열의 숫자는 소수점으로 쉼표를 써요. 1.234,50 값을 1234.50 값으로 읽어요.
- "Importe" 열의 N/A 값을 빈 값으로 읽었어요(5개 중 1개).
- "Pagado" 열에 예/아니요 단어(sí, no)가 있어 불리언으로 저장했어요.
파일은 이 컴퓨터에서 변환되고 업로드되지 않아요.
다른 샘플:
CSV 파일 하나, 데이터베이스 여섯 개
위 샘플 ventas_2024.csv의 각 열이 데이터베이스마다 받는 형식이에요.
| 파일에서 | 첫 값 | PostgreSQL | MySQL | MariaDB | SQLite | SQL Server | Oracle |
|---|---|---|---|---|---|---|---|
| Folio | 00412 | text | varchar(8) | varchar(8) | TEXT | nvarchar(8) | VARCHAR2(8 CHAR) |
| Cliente | Peña Muñoz | text | varchar(16) | varchar(16) | TEXT | nvarchar(16) | VARCHAR2(16 CHAR) |
| Ciudad | Mérida | text | varchar(16) | varchar(16) | TEXT | nvarchar(16) | VARCHAR2(16 CHAR) |
| Fecha | 15/02/2024 | date | date | date | DATE | date | DATE |
| Importe | 1.234,50 | numeric(6,2) | decimal(6,2) | decimal(6,2) | NUMERIC(6,2) | decimal(6,2) | NUMBER(6,2) |
| Pagado | sí | boolean | tinyint(1) | tinyint(1) | BOOLEAN | bit | NUMBER(1) |
스크립트를 데이터베이스에 불러오기
다운로드한 파일은 일반 .sql 파일이에요. 각 데이터베이스의 자체 도구로 실행해요.
PostgreSQL
psql -v ON_ERROR_STOP=1 -d mydb -f ventas_2024.postgresql.sqlON_ERROR_STOP을 쓰면 psql이 첫 오류에서 멈춰요. 스크립트는 하나의 트랜잭션으로 실행되므로, 불러오기에 실패해도 데이터베이스는 그대로예요.
MySQL
mysql --default-character-set=utf8mb4 mydb < ventas_2024.mysql.sql스크립트가 utf8mb4를 직접 설정해요. 이 플래그로 클라이언트도 같은 방식으로 보내므로 악센트가 그대로 전달돼요.
MariaDB
mariadb --default-character-set=utf8mb4 mydb < ventas_2024.mariadb.sql스크립트가 utf8mb4를 직접 설정해요. 이 플래그로 클라이언트도 같은 방식으로 보내므로 악센트가 그대로 전달돼요.
SQLite
sqlite3 ventas_2024.db < ventas_2024.sqlite.sql데이터베이스 파일이 없으면 새로 만들어져요. 변환기에서는 명령 없이 바로 쓸 수 있는 .sqlite 데이터베이스도 다운로드할 수 있어요.
SQL Server
sqlcmd -S localhost -d mydb -f 65001 -i ventas_2024.sql_server.sql-f 65001은 파일을 UTF-8로 읽으므로 악센트와 ñ가 적힌 그대로 전달돼요.
Oracle
sqlplus user@//localhost/mydb @ventas_2024.oracle.sql스크립트가 치환 변수를 꺼서(SET DEFINE OFF) 데이터 속 앰퍼샌드가 그대로 남아요.
명령줄은 파일을 SQLite 데이터베이스에 무료로 바로 불러와요. IntoSQL Pro에서는 명령줄과 데스크톱 앱으로 PostgreSQL, MySQL, MariaDB에도 불러올 수 있어요. SQL Server와 Oracle은 스크립트를 실행하세요.
CSV 파일과 데이터베이스별로 알아 둘 점
IntoSQL이 CSV 파일에서 읽는 내용
- Windows-1252와 UTF-16을 포함해 인코딩을 감지하므로 악센트 문자와 ñ도 그대로 들어와요.
- 구분자를 감지해요. 쉼표, 세미콜론, 탭, 세로 막대를 지원해요. 세미콜론일 때는 1.234,50 같은 소수점 쉼표를 숫자로 읽어요.
- 따옴표로 묶인 값에는 구분자와 줄바꿈이 들어갈 수 있어요.
데이터베이스별로 알아 둘 점
- 파일을 연 다음 데이터베이스를 고르세요. 각 데이터베이스가 지원하는 타입을 사용해요.
데이터베이스별로 값의 종류가 저장되는 방식
| 값 | PostgreSQL | MySQL | MariaDB | SQLite | SQL Server | Oracle |
|---|---|---|---|---|---|---|
| 예/아니요 | boolean | tinyint(1) | tinyint(1) | BOOLEAN | bit | NUMBER(1) |
| 정수 | integer | int | int | INTEGER | int | NUMBER(10) |
| 큰 정수 | bigint | bigint | bigint | INTEGER | bigint | NUMBER(19) |
| 소수 | numeric(p,s) | decimal(p,s)double | decimal(p,s)double | NUMERIC(p,s)TEXT | decimal(p,s) | NUMBER(p,s) |
| 부동소수점 | double precision | double | double | REAL | float | BINARY_DOUBLE |
| 날짜 | date | date | date | DATE | date | DATE |
| 시각 | time | time(6)time | time(6)time | TIME | time | INTERVAL DAY(0) TO SECOND |
| 날짜와 시간 | timestamp | datetime(6)datetime | datetime(6)datetime | DATETIME | datetime2 | TIMESTAMP |
| 날짜, 시간과 시차 | timestamptz | datetime(6)datetime | datetime(6)datetime | DATETIME | datetimeoffset | TIMESTAMP WITH TIME ZONE |
| 텍스트 | text | varchar(n)textmediumtextlongtext | varchar(n)textmediumtextlongtext | TEXT | nvarchar(n)nvarchar(max) | VARCHAR2(n CHAR)CLOB |
CSV에서 SQL로 변환하기에 관한 질문
여기에 답이 없나요? 문의 페이지로 연락하시면 담당자가 답장해요. 문의 페이지
CSV 파일을 SQL로 어떻게 변환하나요?
이 페이지 위쪽의 변환기에 파일을 놓고 데이터베이스를 고르세요. PostgreSQL, MySQL, MariaDB, SQLite, SQL Server, Oracle 중 각자 지원하는 형식을 써요. 스크립트를 다운로드해 데이터베이스에서 실행하세요.
CSV가 세미콜론이나 탭으로 구분되어 있으면요?
구분 기호는 쉼표, 세미콜론, 탭, 세로 막대 중에서 자동으로 감지돼요. 추가 옵션에서 직접 정할 수도 있어요. 세미콜론일 때는 1.234,50 같은 소수점 쉼표도 숫자로 읽어요.
데이터베이스별로 어떤 형식을 쓰나요?
데이터베이스마다 달라요. 예/아니요 값은 PostgreSQL에서 boolean, MySQL과 MariaDB에서 tinyint(1), SQL Server에서 bit, Oracle에서 NUMBER(1)이에요. 이 페이지의 표에 값 종류별로 모두 나와 있어요.
앞자리 0이 유지되나요?
네. 00412 같은 코드는 모든 데이터베이스에서 텍스트로 유지되고 '00412'(으)로 쓰여서 0이 사라지지 않아요.
스크립트 없이 데이터를 불러올 수 있나요?
네. 명령줄은 SQLite에 무료로 불러와요. IntoSQL Pro에서는 데스크톱 앱과 명령줄로 PostgreSQL, MySQL, MariaDB에도 불러올 수 있어요. SQL Server와 Oracle은 스크립트를 실행하세요.
CSV 파일은 얼마나 커도 되나요?
브라우저는 CSV를 들어오는 대로 읽어서 수 GB 파일도 처리해요. Apple M4 노트북에서 명령줄은 100만 행, 174MB CSV를 1초 안에 변환해요.