Inicio › Herramientas para desarrolladores › Convertidor de dialectos SQL

Convertidor de dialectos SQL

Pega una consulta, una sentencia CREATE TABLE o un script completo y tradúcelo de un dialecto SQL a otro: MySQL, PostgreSQL, SQLite, SQL Server, Oracle, BigQuery, Snowflake, Redshift, DuckDB, Spark, Presto/Trino, ClickHouse y más. Las funciones sin equivalente en la base de datos de destino se enumeran para que sepas exactamente qué corregir a mano.

Última actualización:

Vista previa con reglas rápidas

Tu SQL nunca sale del navegador. Convertir SQL carga el transpilador de código abierto sqlglot (Python, ejecutado localmente con Pyodide, unos 12 MB una sola vez y luego en caché); las reglas rápidas funcionan al instante sin él.

Publicidad
Publicidad

Cómo usar Convertidor de dialectos SQL

  1. Elige los dialectos de origen y de destino, por ejemplo de MySQL a PostgreSQL. El botón de intercambio los invierte.
  2. Pega tu SQL o abre un archivo .sql. Enseguida aparece una traducción con reglas rápidas.
  3. Pulsa Convertir SQL para cargar el motor completo de sqlglot (una vez, unos 12 MB) y obtener un análisis completo y un resultado formateado.
  4. Lee las listas de No compatibles y Notas bajo los paneles y ajusta lo que la base de datos de destino no pueda expresar.
  5. Copia o descarga el SQL convertido y pruébalo en tu base de datos.

Diferencias comunes entre dialectos SQL

TareaMySQLPostgreSQLSQL ServerOracleSQLite
Poner comillas a un identificador`name`"name"[name]"NAME""name"
Primeras 10 filasLIMIT 10LIMIT 10SELECT TOP 10FETCH FIRST 10 ROWS ONLYLIMIT 10
Fecha y hora actualesNOW()NOW()GETDATE()SYSTIMESTAMPCURRENT_TIMESTAMP
Valor alternativo para NULLIFNULL(a, b)COALESCE(a, b)ISNULL(a, b)NVL(a, b)IFNULL(a, b)
Longitud de una cadenaCHAR_LENGTH(s)LENGTH(s)LEN(s)LENGTH(s)LENGTH(s)
Unir cadenasCONCAT(a, b)a || ba + ba || ba || b
Agregar cadenasGROUP_CONCAT(x)STRING_AGG(x, ',')STRING_AGG(x, ',')LISTAGG(x, ',')GROUP_CONCAT(x)
Clave autoincrementalAUTO_INCREMENTGENERATED … AS IDENTITYIDENTITY(1,1)GENERATED … AS IDENTITYINTEGER PRIMARY KEY
Columna booleanaTINYINT(1) / BOOLEANBOOLEANBITNUMBER(1)INTEGER
UpsertON DUPLICATE KEY UPDATEON CONFLICT … DO UPDATEMERGEMERGEON CONFLICT … DO UPDATE

Consejos para una migración sin problemas

  • Convierte primero el esquema. Traduce las sentencias CREATE TABLE, crea las tablas y luego convierte las consultas que las usan, para que los errores de tipo salgan pronto.
  • Ojo con el comportamiento implícito. MySQL compara cadenas sin distinguir mayúsculas de minúsculas por defecto y PostgreSQL no; las cadenas vacías son NULL en Oracle; la división entera trunca en PostgreSQL y SQL Server.
  • Pon comillas de forma coherente. PostgreSQL pasa a minúsculas los nombres sin comillas y Oracle a mayúsculas, así que un nombre creado entre comillas siempre debe llevarlas. La opción Poner comillas a todos los identificadores conserva las mayúsculas y minúsculas originales.
  • Prueba la paginación y las fechas. OFFSET/FETCH necesita ORDER BY en SQL Server, y las funciones de fecha rara vez tienen una equivalencia exacta.
  • Ordena antes y después: pasa el resultado por el formateador de SQL y prueba consultas pequeñas en el compilador de SQL online.

Preguntas frecuentes

¿Cómo funciona el convertidor de dialectos SQL?

Convertir SQL ejecuta sqlglot, una biblioteca de Python de código abierto que analiza el SQL en un árbol sintáctico y lo vuelve a escribir en otro dialecto. Se ejecuta dentro de tu navegador mediante Pyodide, así que tus consultas nunca se suben. Antes de que se cargue ese motor, un conjunto integrado de reglas rápidas resuelve al instante las diferencias más comunes.

¿Puede convertir MySQL a PostgreSQL?

Sí. Los cambios típicos incluyen pasar los identificadores con acentos graves a comillas dobles, AUTO_INCREMENT a GENERATED BY DEFAULT AS IDENTITY, DATETIME a TIMESTAMP, TINYINT(1) a BOOLEAN, IFNULL a COALESCE, LIMIT offset, count a LIMIT … OFFSET, y eliminar las opciones de tabla ENGINE y CHARSET. ON DUPLICATE KEY UPDATE se marca para que puedas reescribirlo como ON CONFLICT.

¿Cómo se convierte LIMIT para SQL Server y Oracle?

SQL Server usa SELECT TOP n para un límite simple y OFFSET m ROWS FETCH NEXT n ROWS ONLY para paginar, lo que requiere una cláusula ORDER BY. Oracle 12c y posteriores usan OFFSET … FETCH FIRST n ROWS ONLY; las versiones anteriores necesitan ROWNUM.

¿Qué significa "no compatible" en los resultados?

Marca una función que la base de datos de destino no puede expresar directamente, por ejemplo RETURNING en MySQL, FULL OUTER JOIN en MySQL u ON UPDATE CURRENT_TIMESTAMP de MySQL en otras bases de datos. El convertidor genera el resultado más parecido posible y las enumera para que puedas reescribirlas a mano.

¿Se convierten los procedimientos almacenados y los disparadores?

El código procedimental (PL/SQL, lotes de T-SQL con variables y control de flujo, funciones PL/pgSQL) varía demasiado entre bases de datos para traducirlo automáticamente. El convertidor está pensado para consultas, DML y DDL como CREATE TABLE, CREATE VIEW e INSERT.

¿Se envía mi SQL a un servidor?

No. La propia página hace la conversión. El único uso de la red es descargar el entorno Pyodide y el paquete sqlglot desde CDN públicas la primera vez que pulsas Convertir SQL; el texto de tu SQL se queda en el navegador.

¿Por qué hay que revisar las funciones de fecha?

El cálculo y el formato de fechas son de las partes menos estandarizadas de SQL: DATEADD, DATE_ADD, la aritmética con INTERVAL, DATE_FORMAT, TO_CHAR y strftime reciben argumentos distintos. sqlglot convierte muchas de ellas, pero prueba siempre la lógica de fechas y las zonas horarias en la base de datos de destino.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Conversores de datos y formatos de archivo →