别再为每个数据库重写同一段逻辑了
先问一个问题:你的团队在用几个数据库?
MySQL 做 OLTP、PostgreSQL 做 OLAP、Snowflake 做数据仓库、偶尔还要给某个历史遗留的 Oracle 系统跑个报表……这几乎是现代数据团队的标配。
然后问题来了:同一段业务逻辑,你要写几遍?
“方言税”:每个数据库都在收
SQL 有个很微妙的东西叫“方言”。标准 SQL 是一回事,但每个数据库都有自己的“口音”:
MySQL 的 LIMIT,在 Oracle 里是 ROWNUM,在 SQL Server 里是 TOP
日期函数:MySQL 用 DATE_ADD,PostgreSQL 用 INTERVAL,Oracle 用 ADD_MONTHS
字符串拼接:MySQL 用 CONCAT,SQL Server 用 +,PostgreSQL 用 ||
窗口函数的支持程度、CTE 的递归语法、GROUP BY 的严格程度,各有各的规矩
你花了一下午调通了一段复杂的分析 SQL,在 MySQL 上跑得欢。然后需求来了:同样的逻辑要在 Snowflake 上跑。你打开编辑器,把那段 SQL 复制过去,一跑——报错。
不是逻辑错了。是方言不对。
于是你开始改:LIMIT 换成 QUALIFY 的写法,日期函数全部重写,字符串拼接的语法换掉……改完了跑通了。但下次需求再变呢?再改一遍?再下次换个数据库呢?
你花在“翻译方言”上的时间,比花在“思考逻辑”上的时间还多。
这不是个别现象。Stack Overflow 的调查显示,开发者花在解决环境配置和兼容性问题上的时间,占编码总时间的相当大比例。而 SQL 方言差异,是其中最隐蔽、最消耗精力的一种“兼容性税”。
更糟的是,这种成本是累积的。每支持一个新数据库,你就要多维护一套 SQL 副本。三套数据库 = 三套 SQL。改一个业务口径 = 改三处地方。漏改一处 = 线上数据对不上 = 半夜被叫起来修 bug。
为什么不能“写一次,跑所有”?
你可能会想:“那用标准 SQL 不就行了?”
理论上是这样。但现实是:标准 SQL 覆盖不了真实业务需求。窗口函数的方言差异、日期时间处理的五花八门、字符串操作的不同实现,这些在标准 SQL 里要么没定义,要么定义得太宽松,每个数据库的实现都不一样。
但反过来想:你需要的不是“一套 SQL 跑所有”,而是“一套逻辑生成所有”。
这两个概念的区别很大。
“一套 SQL 跑所有”是把同一段文本塞给所有数据库——这条路走不通。
“一套逻辑生成所有”是只写一次逻辑,让工具帮你翻译成每个数据库的方言——这条路走得通。
SQLazy 的做法:逻辑写一次,方言自动适配
SQLazy 走的正是第二条路。
你的逻辑用 workflow 写,就是那套分步的、可读的、按顺序排列的操作序列。然后编译器负责把它翻译成目标数据库的原生 SQL。
比如“计算股票最长连续上涨天数”这个逻辑,用 workflow 写:
Name |
Anchor |
Statement |
t1 |
stock |
filter CODE = 100046 |
t2 |
sort DT asc |
|
t3 |
segment CL down as NoRisingDays |
|
t4 |
summarize DT count as ContinuousDays group NoRisingDays |
|
t5 |
summarize ContinuousDays max as max_ContinuousDays |
这份 workflow 和数据库无关。它描述的是逻辑,不是 SQL 语法。
然后你告诉编译器目标数据库是哪个——MySQL、PostgreSQL、Oracle、Snowflake、BigQuery——它自动生成对应的 SQL。

同样的 workflow,切换一个选项,生成不同方言的 SQL。你不用重写任何东西。

目标数据库 |
生成的 SQL 差异 |
MySQL |
标准 LIMIT、DATE_ADD |
PostgreSQL |
INTERVAL、|| 拼接 |
Oracle |
ROWNUM、ADD_MONTHS |
Snowflake |
QUALIFY、IFF 函数 |
workflow 不变,因为逻辑没变。变的只是编译器输出的“口音”。
这意味着什么?
第一,你只需要维护一份逻辑。改业务口径,只改 workflow。编译器重新生成所有数据库的 SQL。不会出现“改了 MySQL 忘了改 Oracle”的情况。
第二,新人上手更快。不用学每个数据库的方言差异——只需要看懂 workflow,编译器负责处理方言。workflow 是给人看的,SQL 是给数据库跑的。
第三,迁移成本趋近于零。从 MySQL 迁移到 PostgreSQL?切换一个选项,重新编译,所有 SQL 自动适配。不用逐行改代码,不用踩方言的坑。
第四,审计更简单。你审查的是 workflow——一段可读的逻辑描述,而不是几百行分布在不同数据库里的 SQL 副本。
SQL 方言不是“小问题”。它是数据团队每天都在交的隐形税,每多一个数据库,就多一套维护成本,多一份出错风险。
SQLazy 的解法很简单:别让人类去翻译方言,让编译器去做。
你只管把逻辑写清楚。剩下的事情,交给编译器。而且逻辑还可以借助 LLM 来辅助实现,口语化表达可以被规范成 SQLazy 语句。
AI writes the logic. A compiler writes the SQL.
