本文へスキップ

CSV を SQL に変換

CSV ファイルをドロップしてデータベースを選ぶと、CREATE TABLE と INSERT 文を含む SQL スクリプトができます。各列に型を付け、すべての修正を行と列とともに一覧にします。

ファイル
csvventas_2024.csvサンプルファイル、357 B
データベース

5 行を変換、修正 8 件、却下なし

表示
ventas_2024.csv の先頭の行です。修正した箇所に印が付いています
行
500412Peña MuñozMérida15/02/20241.234,50sí
600413José Ángel RuizLeón03/02/202499,90no
700414Zoë OrtízQuerétaro29/02/2024N/Así
800415Ñuño CastañedaOaxaca28/02/20247,25no
900416Iñaki OlaizolaMazatlán11/03/2024980,75sí
-- 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;

修正

  1. ファイルは windows‑1252 で書かれていたため、UTF-8 に変換しました。
  2. ヘッダーは 4 行目にあります。その上の行は含めていません。
  3. 10 行目 ("TOTAL") は合計のため、含めていません。
  4. "Folio" の先頭のゼロを保持しました。00412 は 00412 のまま、テキストとして保存します。
  5. 15/02/2024 から "Fecha" の日付は日が先とわかるため、03/02/2024 は 2024‑02‑03 として読み取ります。
  6. "Importe" の数値は小数点にカンマを使っています。1.234,50 は 1234.50 として読み取ります。
  7. "Importe" の N/A を空として読み取りました(5 件中 1 件)。
  8. "Pagado" には「はい/いいえ」の語 (sí, no) があるため、ブール値として保存しました。

ファイルはこのコンピューター上で変換され、アップロードされることはありません。

その他のサンプル:

1 つの CSV ファイル、6 つのデータベース

上のサンプル ventas_2024.csv の各列に、データベースごとに付く型です。

ファイル内最初の値PostgreSQLMySQLMariaDBSQLiteSQL ServerOracle
Folio00412textvarchar(8)varchar(8)TEXTnvarchar(8)VARCHAR2(8 CHAR)
ClientePeña Muñoztextvarchar(16)varchar(16)TEXTnvarchar(16)VARCHAR2(16 CHAR)
CiudadMéridatextvarchar(16)varchar(16)TEXTnvarchar(16)VARCHAR2(16 CHAR)
Fecha15/02/2024datedatedateDATEdateDATE
Importe1.234,50numeric(6,2)decimal(6,2)decimal(6,2)NUMERIC(6,2)decimal(6,2)NUMBER(6,2)
Pagadosíbooleantinyint(1)tinyint(1)BOOLEANbitNUMBER(1)

スクリプトをデータベースに読み込む

ダウンロードされるのは普通の .sql ファイルです。各データベース付属のツールで実行できます。

  • PostgreSQL

    psql -v ON_ERROR_STOP=1 -d mydb -f ventas_2024.postgresql.sql

    ON_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 のような小数点のカンマを数値として読み取ります。
  • 引用符で囲まれた値には、区切り文字や改行を含められます。

各データベースについて知っておくこと

  • ファイルを開いたらデータベースを選んでください。それぞれがサポートする型が使われます。

各データベースで各種類の値がどう保存されるか

値PostgreSQLMySQLMariaDBSQLiteSQL ServerOracle
はい/いいえbooleantinyint(1)tinyint(1)BOOLEANbitNUMBER(1)
整数integerintintINTEGERintNUMBER(10)
大きな整数bigintbigintbigintINTEGERbigintNUMBER(19)
小数numeric(p,s)decimal(p,s)doubledecimal(p,s)doubleNUMERIC(p,s)TEXTdecimal(p,s)NUMBER(p,s)
浮動小数点数double precisiondoubledoubleREALfloatBINARY_DOUBLE
日付datedatedateDATEdateDATE
時刻timetime(6)timetime(6)timeTIMEtimeINTERVAL DAY(0) TO SECOND
日付と時刻timestampdatetime(6)datetimedatetime(6)datetimeDATETIMEdatetime2TIMESTAMP
日付と時刻、時差付きtimestamptzdatetime(6)datetimedatetime(6)datetimeDATETIMEdatetimeoffsetTIMESTAMP WITH TIME ZONE
テキストtextvarchar(n)textmediumtextlongtextvarchar(n)textmediumtextlongtextTEXTnvarchar(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 秒未満で変換します。