PostgreSQL 函数 + jOOQ 中的强制转换

Axe*_*ine 2 postgresql jooq

这个说法用jOOQ怎么表达呢?

SELECT version FROM abc ORDER BY string_to_array(version, '.', '')::int[] desc limit 1

我正在为功能和演员组合而苦苦挣扎。

Luk*_*der 6

您有多种选择。

偷懒一下,将所有内容包装在一个简单的 SQL 表达式中:

Field<Integer[]> f1 = 
    DSL.field("string_to_array(version, '.', '')::int[]", Integer[].class);
Run Code Online (Sandbox Code Playgroud)

创建一个可重用的函数:

Field<Integer[]> stringToIntArray(Field<String> arg1, String arg2, String arg3) {
    return DSL.field("string_to_array({0}, {1}, {2})::int[]", Integer[].class,
        arg1, DSL.val(arg2), DSL.val(arg3));
}

// and then...
Field<Integer[]> f2 = stringToIntArray(ABC.VERSION, ".", "");
Run Code Online (Sandbox Code Playgroud)

使用代码生成器生成内置函数,并显式转换它:

Field<Integer[]> f3 = Routines.stringToArray(ABC.VERSION, DSL.val("."), DSL.val(""))
                              .cast(Integer[].class);
Run Code Online (Sandbox Code Playgroud)

内置函数是数据库pg_catalog中架构的一部分postgres

把它放在一起

DSL.using(configuration)
   .select(ABC.VERSION)
   .from(ABC)
   .orderBy(fN.desc()) // place any of f1, f2, f3 here
   .limit(1)
   .fetch();
Run Code Online (Sandbox Code Playgroud)