Saltar al contenido principal

CSV a SQL INSERT

Este conversor lee CSV RFC 4180 en tu navegador y escribe sentencias SQL INSERT. Cada celda se tipa por inspección: números sin comillas quedan como números, true y false se convierten en TRUE y FALSE, y lo demás es una cadena con comillas simples y escapadas. Los nombres de encabezado se convierten en identificadores de columna entre comillas dobles; no se sube nada.

Solo local

CSV a SQL INSERT: explicación

CSV no tiene tipos. Todo en una exportación de hoja de cálculo es texto, y la base de datos es el lugar que decide qué significa un valor — lo que hace que la conversión de CSV a SQL sea aquella en la que los tipos se aplican en tu nombre, ya sea que lo hayas pensado o no. Este conversor lo hace por celda y establece sus reglas claramente: una celda que se lee como número se convierte en número, true o false se convierten en TRUE o FALSE, una celda vacía se convierte en NULL, y lo demás es una cadena.

El lado de SQL usa las defensas estándar y nada exótico: los nombres de encabezado se convierten en identificadores de columna entre comillas dobles, los valores de cadena se envuelven en comillas simples con comillas incrustadas duplicadas — la forma O''Brien que cada dialecto de SQL lee correctamente — y las filas se emiten como una sentencia INSERT de varias filas. El análisis es estrictamente RFC 4180, por lo que los campos entre comillas con comas o saltos de línea incrustados sobreviven intactos, que es exactamente donde los conversores rápidos que dividen por comas corrompen tus datos.

La conversión se ejecuta enteramente en esta pestaña del navegador. El CSV lo analiza el código en la página, el SQL se ensambla en memoria, y ninguna solicitud sale de la página — el panel de Red en DevTools permanece vacío mientras trabajas, y la Content-Security-Policy del sitio prohíbe conexiones salientes además.

Si tus registros ya tienen tipos — de una API o una exportación que los conservó — el conversor de JSON a SQL los toma como dados en lugar de inferirlos, con las mismas reglas de comillas y NULL.

¿Quieres los datos como JSON en lugar de SQL? El conversor de CSV a JSON usa el mismo analizador RFC 4180 y te entrega registros con tipos en lugar de sentencias.

Cómo funciona realmente la conversión

El motor analiza tu CSV según las reglas reales de RFC 4180 — registros, campos, comillas duplicadas dentro de campos entre comillas, finales de línea CRLF o LF — y luego trata el primer registro como el encabezado y cada registro posterior como una fila del INSERT. La aplicación de tipos se hace por celda, justo antes de la emisión:

Dos detalles de exportaciones reales de hojas de cálculo se manejan en lugar de sufrirse: una marca de orden de bytes UTF-8 al inicio del archivo, que Excel agrega por defecto, se elimina antes del análisis, y el nombre de tabla que escribes en el campo de la herramienta se convierte en el identificador entre comillas del INSERT — el ejemplo de abajo usa products.

  • Números: una celda que coincide con un patrón de entero o decimal se emite sin comillas — 42 y 24.99 se convierten en números. Un cero inicial lo descalifica, por lo que 02134 queda como cadena y tus códigos postales sobreviven.
  • Booleanos: true o false, en cualquier combinación de mayúsculas y minúsculas, se convierten en TRUE o FALSE.
  • Celdas vacías: un campo vacío se convierte en NULL. Un campo que está presente pero está vacío entre comillas ("") queda como una cadena vacía, porque RFC 4180 distingue entre ambos y SQL también.
  • Cadenas: lo demás se pone entre comillas simples con comillas incrustadas duplicadas — O'Brien se convierte en 'O''Brien'.
  • Identificadores: los nombres de encabezado se emiten como nombres de columna entre comillas dobles, en el orden del encabezado.

La asignación de celda a literal

Una línea por regla, para que puedas predecir la salida antes de ejecutarla. Ten en cuenta que la celda vacía y la celda vacía entre comillas son deliberadamente dos filas diferentes de esta tabla, porque son el par sobre el que más preguntan:

Celda CSVLiteral SQLPor qué
4242Patrón de entero
24.9924.99Patrón de decimal
trueTRUEPalabra booleana, cualquier caso
(vacía)NULLValor ausente
02134'02134'Cero inicial conservado — código postal
O'Brien'O''Brien'Comilla duplicada según estándar

Cómo se ve la salida

El ejemplo a continuación es el par exacto que el botón Cargar muestra produce para una tabla llamada products. Tres filas, cada una probando una regla: el precio de la lámpara de escritorio es un decimal sin comillas y su indicador de stock un TRUE sin comillas; la fila de la tienda de campaña necesitó comillas RFC 4180 en el CSV porque el nombre del producto contiene una coma, y el SQL emitido duplica su apóstrofo; la fila de la linterna deja dos celdas vacías y ambas terminan como NULL, no como cadenas vacías. Guarda la salida como un archivo .sql y se ejecuta tal cual en psql, sqlite3 o cualquier ejecutor de migraciones — la sentencia es completa y termina en punto y coma.

Filas irregulares y otros rechazos honestos

RFC 4180 técnicamente permite registros con menos o más campos que el encabezado, pero SQL no — una tupla INSERT debe llenar exactamente las columnas que su sentencia declara. Por lo tanto, dos entradas se rechazan con un mensaje que nombra la línea, en lugar de rellenar o truncar:

  • Un registro cuyo número de campos difiere del del encabezado — rellenar con NULLs inventaría valores que nunca mediste, y descartar extras descartaría datos que sí proporcionaste.
  • Nombres de encabezado duplicados — dos columnas con el mismo nombre no pueden ser ambos identificadores entre comillas en un INSERT, por lo que el conversor informa la columna en lugar de renombrar una de ellas silenciosamente.

Preguntas frecuentes

¿Se sube mi CSV cuando lo convierto a SQL?

No. El analizador y el escritor de SQL se ejecutan dentro de esta pestaña del navegador, en JavaScript que se cargó cuando se abrió la página. No hay una ruta de subida, y la Content-Security-Policy impide que la página se conecte hacia afuera. Verifícalo tú mismo en DevTools: el panel de Red no muestra tráfico mientras se ejecuta la conversión, incluso para archivos grandes.

¿Qué dialecto CSV acepta el analizador?

RFC 4180, el estándar: campos delimitados por comas, escape con comillas dobles, comillas duplicadas dentro de campos entre comillas, y comas o saltos de línea incrustados dentro de campos entre comillas se analizan correctamente. Se aceptan tanto finales de registro CRLF como LF sin más. Lo que no hace es adivinar — archivos delimitados por punto y coma o tabulación se rechazan con un mensaje, porque un conversor que cambia silenciosamente los delimitadores corrompe las columnas que no puede ver.

¿Cómo decide la inferencia de tipos entre número, booleano y cadena?

Por celda, contra patrones estrictos: un campo es número solo si coincide exactamente con un literal entero o decimal, un booleano solo si lee true o false en cualquier caso, y NULL solo si el campo está vacío. Lo demás se emite como una cadena entre comillas. La estrictitud es el punto — un conversor que tipa valores como 007 agresivamente le dará sorpresas a tu base de datos.

¿Por qué mi código postal o código de producto quedó como cadena?

Porque debería ser así. Un código como 02134 o 007 lleva información en sus ceros iniciales, y un número no tiene dónde conservarlos. El patrón de inferencia rechaza los ceros iniciales a propósito, por lo que esas celdas se emiten como cadenas entre comillas y el significado de la columna sobrevive intacto al viaje hacia la base de datos.

¿Qué pasa con las fechas en el CSV?

Llegan como cadenas entre comillas, por diseño. Los literales de fecha de SQL difieren entre dialectos, y un conversor que reescribe 2024-01-05 en una forma específica del dialecto está editando tus datos. La cadena llega a la base de datos intacta; una columna DATE, o el propio cast de la base de datos, aplica el tipo en la inserción — que es el único lugar donde pertenece esa decisión.

¿Puedo obtener una sentencia INSERT por fila en lugar de eso?

La salida es un INSERT de varias filas único — un análisis, una sentencia compatible con transacciones, y la forma que recomiendan las guías de carga masiva. Las tuplas VALUES están una por línea debajo de la lista de columnas, por lo que si tus herramientas requieren sentencias de una sola fila, dividirlo es una edición mecánica: copia la lista de columnas y termina cada tupla con un punto y coma.