PostgreSQL 函数 + 在 jOOQ 中强制转换
Posted
技术标签:
【中文标题】PostgreSQL 函数 + 在 jOOQ 中强制转换【英文标题】:PostgreSQL function + cast in jOOQ 【发布时间】:2014-12-06 17:28:34 【问题描述】:这句话用jOOQ怎么表达?
SELECT version FROM abc ORDER BY string_to_array(version, '.', '')::int[] desc limit 1
我正在为函数和演员组合而苦苦挣扎。
【问题讨论】:
非常有趣的排序技术,顺便说一句...最后,PostgreSQL 中的数组用例 :-) 这是直接在数据库中对版本号进行排序。它是 Postgres,非常棒 :-) 是的,PostgreSQL 似乎增强了 SQL:2011 标准,该标准在8.2 <comparison predicate>
、General Rules
、1) b) ii)
中指定未为数组定义 <
比较操作...我不过,想知道 PostgreSQL 是否会做出这样的保证……it seems to be the case
yep, it is
【参考方案1】:
您有多种选择。
懒惰,将所有内容都包装在一个简单的 SQL 表达式中:
Field<Integer[]> f1 =
DSL.field("string_to_array(version, '.', '')::int[]", Integer[].class);
创建一个可重用的函数:
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, ".", "");
使用代码生成器生成内置函数,并显式转换:
Field<Integer[]> f3 = Routines.stringToArray(ABC.VERSION, DSL.val("."), DSL.val(""))
.cast(Integer[].class);
内置函数是postgres
数据库中pg_catalog
架构的一部分。
放在一起
DSL.using(configuration)
.select(ABC.VERSION)
.from(ABC)
.orderBy(fN.desc()) // place any of f1, f2, f3 here
.limit(1)
.fetch();
【讨论】:
以上是关于PostgreSQL 函数 + 在 jOOQ 中强制转换的主要内容,如果未能解决你的问题,请参考以下文章
jOOQ:比较 uuid(来自 postgresql)和字符串(类中的用户 id)
使用 jOOQ 在 PostgreSQL 中进行 UPSERT