我构建了 SQLTranslate:一款 AI 驱动的在数据库方言之间转换 SQL 的工具

发布: (2025年12月4日 GMT+8 21:54)
3 min read
原文: Dev.to

Source: Dev.to

问题

作为开发者,我们都经历过——从 MySQL 迁移到 PostgreSQL,或者接手一个使用 Oracle 的项目,而你的团队却在使用 SQL Server。手动在数据库方言之间转换 SQL 查询既繁琐,又容易出错,且耗时。每种数据库都有自己的语法细节、函数名称和日期处理方式。

我花了无数小时把 DATE_SUB() 改写成 NOW() - INTERVAL,修正引号风格,并在不同 SQL 方言之间寻找等价函数的文档。一定有更好的办法。

解决方案

这就是我创建 SQLTranslate 的原因——一款基于 AI 的工具,可在五大数据库方言之间翻译 SQL 查询:

  • MySQL
  • PostgreSQL
  • SQLite
  • SQL Server
  • Oracle

只需粘贴你的查询,选择源方言和目标方言,即可在几秒钟内得到准确的翻译。工具甚至会提供有用的翻译说明,解释哪些地方发生了变化以及原因。

工作原理

SQLTranslate 使用 AI 不仅理解语法差异,还能把握查询的语义含义。它能够处理:

  • 日期和时间函数
  • 字符串操作
  • 聚合函数
  • 连接语法差异
  • 数据库特定特性
  • 引号和标识符约定

示例

MySQL 查询

SELECT user_id, username, 
  COUNT(o.order_id) AS total_orders,
  IFNULL(SUM(o.amount), 0) AS total_spent
FROM users u
LEFT JOIN orders o ON u.user_id = o.user_id
WHERE u.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY u.user_id, u.username
LIMIT 10;

PostgreSQL 翻译

SELECT 
    u.user_id,
    u.username,
    COUNT(o.order_id) AS total_orders,
    COALESCE(SUM(o.amount), 0) AS total_spent
FROM users u
LEFT JOIN orders o ON u.user_id = o.user_id
WHERE u.created_at >= NOW() - INTERVAL '30 days'
GROUP BY u.user_id, u.username
LIMIT 10;

工具自动完成了以下操作:

  • IFNULL() 改为 COALESCE()
  • DATE_SUB(NOW(), INTERVAL 30 DAY) 转换为 NOW() - INTERVAL '30 days'
  • 调整了 PostgreSQL 的间隔字面量格式

我为何构建它

在工业自动化和数据库系统领域工作了 20 多年后,我看到团队在数据库迁移上浪费了大量时间。无论你是:

  • 将遗留系统迁移到现代数据库
  • 在多个客户环境之间工作
  • 在 SQLite 中原型开发并部署到 PostgreSQL
  • 转换供应商特定的查询

SQLTranslate 都能节省数小时的手动工作并降低错误率。

试一试

该工具已上线:

期待你的反馈!你主要使用哪些数据库方言?在 SQL 转换过程中遇到过哪些挑战?

SQLTranslate 截图

Back to Blog

相关文章

阅读更多 »