将 Excel 转换为 SQL
拖入你的 Excel 文件并选择数据库,即可得到包含 CREATE TABLE 和 INSERT 语句的 SQL 脚本。每列都会获得类型,每处修正都会连同所在行和列一起列出。
已转换 4 行,10 处修正,无拒绝
| 行 | ||||||
|---|---|---|---|---|---|---|
| 5 | 00127 | Peña Muñoz | 01234 | 03/02/2024 | sí | 1.234,50 |
| 6 | 00128 | José Ángel | 09870 | 15/02/2024 | no | N/A |
| 7 | 00129 | Zoë Ortíz | 44100 | 29/02/2024 | sí | -12,00 |
| 8 | 00130 | Ñuño Castañeda | 06700 | 11/03/2024 | no | 980,75 |
-- Written by IntoSQL for PostgreSQL.
SET client_encoding = 'UTF8';
BEGIN;
CREATE TABLE clientes_2024 (
no_cliente text NOT NULL,
nombre text NOT NULL,
c_p text NOT NULL,
alta date NOT NULL,
activo boolean NOT NULL,
saldo numeric(6,2)
);
COMMENT ON COLUMN clientes_2024.no_cliente IS 'Nº Cliente';
COMMENT ON COLUMN clientes_2024.c_p IS 'C.P.';
INSERT INTO clientes_2024 (no_cliente, nombre, c_p, alta, activo, saldo) VALUES
('00127', 'Peña Muñoz', '01234', '2024-02-03', TRUE, 1234.50),
('00128', 'José Ángel', '09870', '2024-02-15', FALSE, NULL),
('00129', 'Zoë Ortíz', '44100', '2024-02-29', TRUE, -12.00),
('00130', 'Ñuño Castañeda', '06700', '2024-03-11', FALSE, 980.75);
COMMIT;
修正
- 表头在第 4 行;其上方的行未包含在内。
- 第 9 行("TOTAL")是合计行,因此未包含在内。
- 列 "Nº Cliente" 已改名为 no_cliente,这样 PostgreSQL 无需引号即可读取。
- 列 "C.P." 已改名为 c_p,这样 PostgreSQL 无需引号即可读取。
- 已保留 "Nº Cliente" 中的前导零:00127 仍为 00127,以文本存储。
- 已保留 "C.P." 中的前导零:01234 仍为 01234,以文本存储。
- 15/02/2024 证明 "Alta" 中的日期是日在前,因此 03/02/2024 读作 2024‑02‑03。
- "Activo" 包含是/否类词语(sí, no),已存储为布尔值。
- "Saldo" 中的数字使用小数逗号:1.234,50 读作 1234.50。
- "Saldo" 中的 N/A 已读作空值(4 个值中有 1 个)。
文件在这台电脑上转换,永远不会上传。
其他示例:
一个 Excel 文件,六种数据库
上方的示例 clientes_2024.xlsx,以及它的每一列在各个数据库中获得的类型。
| 文件中 | 第一个值 | PostgreSQL | MySQL | MariaDB | SQLite | SQL Server | Oracle |
|---|---|---|---|---|---|---|---|
| Nº Cliente | 00127 | text | varchar(8) | varchar(8) | TEXT | nvarchar(8) | VARCHAR2(8 CHAR) |
| Nombre | Peña Muñoz | text | varchar(16) | varchar(16) | TEXT | nvarchar(16) | VARCHAR2(16 CHAR) |
| C.P. | 01234 | text | varchar(8) | varchar(8) | TEXT | nvarchar(8) | VARCHAR2(8 CHAR) |
| Alta | 03/02/2024 | date | date | date | DATE | date | DATE |
| Activo | sí | boolean | tinyint(1) | tinyint(1) | BOOLEAN | bit | NUMBER(1) |
| Saldo | 1.234,50 | numeric(6,2) | decimal(6,2) | decimal(6,2) | NUMERIC(6,2) | decimal(6,2) | NUMBER(6,2) |
将脚本导入你的数据库
下载的是普通的 .sql 文件。每种数据库都可用自带的工具运行它。
PostgreSQL
psql -v ON_ERROR_STOP=1 -d mydb -f clientes_2024.postgresql.sqlON_ERROR_STOP 让 psql 在遇到第一个错误时停止。脚本在一个事务中运行,因此导入失败时数据库保持原样。
MySQL
mysql --default-character-set=utf8mb4 mydb < clientes_2024.mysql.sql脚本自身已设置 utf8mb4;该参数让客户端以相同方式发送,因此重音字符完整保留。
MariaDB
mariadb --default-character-set=utf8mb4 mydb < clientes_2024.mariadb.sql脚本自身已设置 utf8mb4;该参数让客户端以相同方式发送,因此重音字符完整保留。
SQLite
sqlite3 clientes_2024.db < clientes_2024.sqlite.sql如果数据库文件不存在,会自动创建。转换器也能直接下载现成的 .sqlite 数据库,无需任何命令。
SQL Server
sqlcmd -S localhost -d mydb -f 65001 -i clientes_2024.sql_server.sql-f 65001 以 UTF-8 读取文件,因此重音字符和 ñ 会按原样导入。
Oracle
sqlplus user@//localhost/mydb @clientes_2024.oracle.sql脚本会关闭替换变量(SET DEFINE OFF),因此数据中的 & 符号会保持不变。
命令行可免费将文件直接导入 SQLite 数据库。使用 IntoSQL Pro,命令行和桌面应用还能导入 PostgreSQL、MySQL 和 MariaDB。SQL Server 和 Oracle 请运行脚本。
关于 Excel 文件和各个数据库需要了解的内容
IntoSQL 如何读取 Excel 文件
- 即使表头行上方有标题或备注,也能找到表头行,末尾的合计行会被排除。
- 以 Excel 序列号存储的日期会变成真正的日期,1900 和 1904 两种日期系统都支持。
- 带前导零的代码(如 00127)保持为文本。工作簿有多个工作表时,由你选择工作表。
关于各个数据库需要了解的内容
- 打开文件后选择数据库:每个数据库都使用它支持的类型。
各类值在每个数据库中的存储方式
| 值 | 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 |
关于 Excel 转 SQL 的问题
这里没有你要的答案?请通过联系页面给我们留言,会有专人回复。 联系页面
如何将 Excel 转换为 SQL?
将文件拖到本页顶部的转换器上,并选择数据库:PostgreSQL、MySQL、MariaDB、SQLite、SQL Server 或 Oracle。每种数据库都使用它支持的类型。下载脚本后在数据库中运行。
会转换工作簿中的哪个工作表?
第一个可见的工作表。工作簿有多个工作表时,会出现"工作表"选项,你可以选择其他工作表。
它在各个数据库中使用哪些类型?
每种数据库各有其类型:是/否值在 PostgreSQL 中为 boolean,在 MySQL 和 MariaDB 中为 tinyint(1),在 SQL Server 中为 bit,在 Oracle 中为 NUMBER(1)。本页的表格列出了每种值。
会保留前导零吗?
会。像 00127 这样的代码在每种数据库中都保持为文本,写作 '00127',不会丢失任何零。
能不用脚本直接导入数据吗?
可以。命令行可免费导入 SQLite;使用 IntoSQL Pro,桌面应用和命令行还能导入 PostgreSQL、MySQL 和 MariaDB。SQL Server 和 Oracle 请运行脚本。
Excel 文件可以多大?
在浏览器中,工作簿需要整体读取,因此上限取决于浏览器分配给本页的内存。桌面应用和命令行可处理任意大小的工作簿;在 Apple M4 笔记本电脑上,命令行转换一个 117 MB、一百万行的工作簿约需一秒。