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" の先頭のゼロを保持しました。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) があるため、ブール値として保存しました。
ファイルはこのコンピューター上で変換され、アップロードされることはありません。
その他のサンプル:
1 つの CSV ファイル、6 つのデータベース
上のサンプル 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 は最初のエラーで止まります。スクリプトは 1 つのトランザクションで実行されるため、読み込みに失敗してもデータベースは元のままです。
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) になります。値の種類ごとの一覧はこのページの表にあります。
先頭のゼロは残りますか?
はい。00412 のようなコードはどのデータベースでもテキストのまま '00412' と書かれるため、ゼロは失われません。
スクリプトを使わずにデータを読み込めますか?
はい。コマンドラインなら SQLite に無料で読み込めます。IntoSQL Pro では、デスクトップアプリとコマンドラインで PostgreSQL、MySQL、MariaDB にも読み込めます。SQL Server と Oracle ではスクリプトを実行してください。
CSV ファイルはどのくらいの大きさまで扱えますか?
ブラウザは CSV を流れてくる順に読むため、数 GB のファイルも扱えます。Apple M4 のノートパソコンでは、コマンドラインが 100 万行・174 MB の CSV を 1 秒未満で変換します。