Datos
Convertir CSV a INSERT SQL, con su CREATE TABLE
Pega CSV, JSON, XML o suelta un Excel y saca el SQL para MySQL, PostgreSQL, SQL Server, Oracle o SQLite. También a JSON, YAML, Markdown y más.
Se parsea y se genera dentro de tu navegador: lo que pegas aquí no viaja a ningún servidor, ni siquiera el Excel.
Por qué importa que no se suba nada
Lo que se pega en un conversor de CSV a SQL casi nunca son datos de juguete: es un export de producción, un listado de clientes, una tabla de pedidos con importes. Pasarlo por una web que lo sube a su servidor significa mandar datos personales a un tercero que no has auditado y que probablemente no aparece en tu registro de tratamientos. Aquí no hay a dónde subirlos: el parser y el generador son JavaScript que corre en tu pestaña. Carga la página, desconecta el wifi y compruébalo.
Cómo funciona, en 3 pasos
-
Pega o suelta los datos
CSV, TSV, JSON, XML o un .xlsx arrastrado sobre el panel. El formato se detecta solo y el delimitador también, así que da igual si tu CSV usa comas o punto y coma.
-
Elige la salida
SQL, JSON, JSON Lines, XML, YAML, Markdown, HTML o CSV. Si eliges SQL, aparecen las opciones de motor, nombre de tabla, CREATE TABLE y tipo de INSERT.
-
Copia o descarga
El panel derecho se actualiza conforme escribes. Revisa los tipos que ha inferido, ajusta lo que haga falta y copia al portapapeles o baja el archivo.
Pruébalo sin buscar un archivo
Los tres botones de datos de ejemplo que hay arriba de la herramienta cargan un juego de datos realista de un clic, con justo lo que suele romper los conversores:
- CSVCabeceras con espacios y símbolos, una coma dentro de un campo, comillas dobles internas, un apóstrofo en «O'Brien», una celda vacía y fechas en dos formatos distintos.
- JSONUn array de objetos con enteros, decimales, booleanos de verdad y una comilla doble dentro de un valor, para ver cómo sale el escapado.
-
XMLElementos repetidos con atributo
idy nodos hijos, que es la forma en la que salen el 90 % de los exports XML.
Convertir CSV a INSERT SQL sin escribir el CREATE TABLE a mano
La parte tediosa de meter un CSV en una base de datos nunca son los INSERT: es decidir el tipo de cada columna, acordarse de cómo se citan los identificadores en el motor de turno y escapar bien las comillas. Eso es exactamente lo que hace esta herramienta. Recorre cada columna entera, mira todos los valores y decide: si todo son enteros, INT; si aparece algún decimal, DECIMAL con la escala que haga falta; si son true/false o sí/no, el booleano del motor; si encajan como fecha, DATE o DATETIME; y si no, texto.
Dos detalles que la mayoría de conversores hacen mal. El primero: si una columna tiene algún valor vacío, sale NULL; si no tiene ninguno, NOT NULL. El segundo: la longitud del VARCHAR se redondea al alza —10, 20, 50, 100, 255…— en vez de ajustarse al carácter exacto del dato más largo de la muestra. Un VARCHAR(11) sacado de tres filas de ejemplo revienta en cuanto entra un nombre un poco más largo, y eso es peor que no generar nada.
Aun así, trátalo como lo que es: un punto de partida muy adelantado, no un esquema definitivo. Revisa el CREATE TABLE, ponle su clave primaria, sus índices y sus FOREIGN KEY, y ajusta las longitudes a lo que sabes del dominio antes de tirarlo contra la base.
Las diferencias entre motores, que son las que te hacen perder la tarde
Todos los motores hablan SQL hasta que los tocas de cerca. Los cinco están contemplados:
- MySQL cita con backticks y, ojo, interpreta la barra invertida dentro del literal, así que hay que doblarla. Un
C:\rutasin escapar te deja el string partido. - PostgreSQL cita con comillas dobles y tiene
BOOLEANde verdad, así que los booleanos salenTRUE/FALSE, no unos y ceros. - SQL Server cita con corchetes y los strings salen con el prefijo
Npara que los acentos y las eñes lleguen enteros a una columnaNVARCHAR. - Oracle pasa los identificadores a mayúsculas, usa
VARCHAR2yNUMBER, y las fechas van envueltas enTO_DATEcon su máscara. Además no admite el multi-valores con esa sintaxis: se generaINSERT ALL … SELECT * FROM dual. - SQLite tiene afinidad de tipos en vez de tipos estrictos, así que todo se resuelve en
INTEGER,REALyTEXT.
En los cinco, la comilla simple se dobla. Si tienes un O'Brien en los datos, saldrá 'O''Brien' y entrará limpio.
JSON a CSV online, y de vuelta
El otro camino es igual de directo: pega un array de objetos y cambia la salida a CSV. Si el JSON no es un array sino un objeto que contiene uno —lo típico de una respuesta de API con {"data": [...]}— se coge el primer array que encuentre. Las claves que no estén en todos los objetos se añaden igualmente como columna, rellenando con vacío donde falten, así que no pierdes campos por el camino.
Con los valores anidados hay que ser honestos: si una propiedad es a su vez un objeto o un array, se serializa como JSON dentro de la celda. Una tabla es plana y un JSON no tiene por qué serlo; aplanar de forma automática y adivinando daría resultados peores que dejarlo a la vista.
Pasar Excel a SQL sin instalar nada
Arrastra el .xlsx sobre el panel y se lee la primera hoja. Como el resto, el motor que entiende el formato se descarga la primera vez que hace falta, nunca al abrir la página. El contenido se vuelca al panel de entrada como CSV, así que puedes revisarlo y corregirlo antes de generar nada, en vez de convertir a ciegas.
Un aviso útil: Excel es aficionado a reformatear. Si tu columna de códigos tiene ceros a la izquierda y llegan aquí, el conversor los respeta y la deja como texto. Pero es muy probable que Excel ya se los haya comido antes, y lo que se ha perdido en el origen no se puede recuperar aquí: formatea esa columna como texto en Excel, o exporta a CSV desde el sistema que generó los datos.
Los límites, dichos antes de que fallen
Unas 50.000 filas se mueven con soltura; por encima de ahí depende de la memoria de tu máquina. A partir de 400 filas el panel derecho enseña solo una vista previa —pintar cien mil líneas en un textarea no aporta nada y atasca el navegador—, pero al copiar o descargar se genera el conjunto completo. De un Excel se lee la primera hoja. Los valores anidados del JSON se serializan, no se aplanan. Y la inferencia de tipos mira los datos que le has dado: si tu muestra son 10 filas, no puede saber lo que hay en las 10.000 restantes.
Preguntas frecuentes
¿Cómo se infieren los tipos de cada columna?
Mirando la columna entera. Si todos los valores no vacíos son enteros, sale INT —o BIGINT si alguno se pasa de 2.147.483.647—. Si llevan decimales, DECIMAL con la escala necesaria. Si son true/false, sí/no y similares, el booleano del motor. Si encajan en ISO o con barras (25/12/2024), DATE o DATETIME: el orden día/mes o mes/día se deduce de la columna entera y, si ningún valor lo aclara, se supone día/mes y lo verás marcado como «supuesto». Una columna de solo dígitos con ceros a la izquierda, como un código postal, se queda en texto para no perderlos, y lo mismo un 1.234 que podría ser decimal o millar. Si no, texto.
Si la columna tiene algún hueco se marca NULL; si no tiene ninguno, NOT NULL. Los tipos detectados se muestran bajo el panel para que los revises antes de copiar.
¿Por qué el VARCHAR sale más grande que mi dato más largo?
A propósito. La longitud se calcula sobre lo que has pegado, que es una muestra, así que se redondea al alza a valores razonables (10, 20, 50, 100, 255, 500…).
Un VARCHAR ajustado al carácter exacto revienta con el primer registro real un poco más largo. Aun así, revisa el CREATE TABLE y ajústalo a lo que sabes de tu dominio antes de ejecutarlo.
¿Escapa bien las comillas y los caracteres raros?
Sí, con las reglas de cada motor. La comilla simple se dobla en los cinco. En MySQL además se dobla la barra invertida, porque interpreta las secuencias de escape dentro del literal. En SQL Server los strings llevan prefijo N para no perder acentos ni eñes.
Los identificadores van entre corchetes, backticks o comillas dobles según el motor, y las fechas de Oracle salen envueltas en TO_DATE con su máscara.
¿Qué diferencia hay entre INSERT individuales y multi-valores?
Uno por fila es más legible y más fácil de depurar: si algo peta, sabes exactamente qué línea. Multi-valores mete varias filas en un solo INSERT y va mucho más rápido en cargas grandes, porque son menos viajes al servidor.
En Oracle esa sintaxis no existe, así que se genera INSERT ALL … SELECT * FROM dual, que es la forma equivalente.
¿Qué hace la limpieza de nombres de columna?
Convierte cabeceras como «Nombre Completo» o «Precio (€)» en nombre_completo y precio: quita acentos, cambia la eñe por n, sustituye espacios y símbolos por guiones bajos y antepone un prefijo si el nombre empieza por número. Puedes desactivarlo si prefieres conservar los nombres tal cual, entrecomillados.
¿Se suben mis datos a algún sitio?
No. El parseo y la generación son JavaScript corriendo en tu pestaña. No hay ninguna petición que lleve el contenido a un servidor, ni siquiera para el Excel. Carga la página, desconecta internet y compruébalo: sigue funcionando.
¿Cuántas filas aguanta?
Unas 50.000 con soltura. Por encima de 400 el panel derecho muestra solo una vista previa para no atascar el navegador, pero al copiar o descargar se generan todas. El límite real es la memoria de tu máquina.
¿Y si mi CSV usa punto y coma en vez de comas?
Se detecta solo. Se prueban coma, punto y coma, tabulador y barra vertical sobre las primeras líneas, sin contar los que estén dentro de comillas, y se elige el que dé una tabla coherente. Es el caso típico del CSV exportado desde un Excel en español.