sql - 好的开源 SQL 解析器?

标签 sql parsing

<分区>

Java 应用程序需要支持数据库 Oracle、DB2 和 MSS。一些涉及 sql 函数的查询的语法在不同的数据库中有不同的语法。示例:Oracle 中的 NULLIF() 可能不适用于 MSS。是否有任何开源 SQL 解析器可以解析查询字符串并将其转换为特定于数据库的 sql?

最佳答案

jOOQ 有一个 SQL 解析器,可以完全满足您的需求。您可以在此处查看在线版本:https://www.jooq.org/translate .解析器也可以用作 CLIAPI .一个例子:

System.out.println(
    DSL.using(SQLSERVER, new Settings()
            .withParseDialect(ORACLE)
            .withTransformTableListsToAnsiJoin(true))
        .parser()
        .parse("select nvl(a.z, 1) from a, b, c where a.x = b.x(+) and a.y = c.y")
);

这将打印:

select coalesce(A.Z, 1)
from A
  join C
    on A.Y = C.Y
  left outer join B
    on A.X = B.X;

jOOQ 是开源 RDBMS 的开源软件,并具有其他数据库产品的商业驱动程序。我知道您可能正在寻找一个全 OSS 库,我只能为您提供一个部分 OSS 的库,也许其他人会发现这个迟到的答案很有用。

免责声明:我为 jOOQ 背后的公司工作。

关于sql - 好的开源 SQL 解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506722/

相关文章:

sql - 如何在oracle中ID的每个重复行仅获取一条记录?

python - 如何将一种类型的标签替换为另一种类型的标签 (<a ...>..</a> => <p>..</p>)

java - 在某些情况下使用双引号解析 CSV

python - SQLAlchemy:相同的表但不同的数据库引擎

mysql - 无法为 opencart 设置管理员帐户

sql - 如何按参数分组但也包括总聚合(未分组依据)?

mysql - 使用 SQL 获取表的前 k 条记录/行

string - 如何在 Go 中获取 rune 的十进制值?

java - 将非 ISO 8601 解析为 ISO_INSTANT

c# - 在 roslyn 中解析 C# 条件编译语句