在JOOQ中执行PostgreSQL的concat()而不是| |的方法?
PostgreSQL中的| |-运算符和concat…-函数的行为不同在JOOQ中执行PostgreSQL的concat()而不是| |的方法?,postgresql,jooq,Postgresql,Jooq,PostgreSQL中的| |-运算符和concat…-函数的行为不同 select 'ABC'||NULL||'def'; -- Result: NULL select concat('ABC', NULL, 'def'); -- Result: 'ABCdef' 混凝土。。。忽略NULL值,但| |表达式中的NULL whithin会使整个结果变为NULL 在JOOQ中,PostgreSQL方言中的DSL.concat使用| |-运算符呈现表达式: Java: dsl.select(
select 'ABC'||NULL||'def';
-- Result: NULL
select concat('ABC', NULL, 'def');
-- Result: 'ABCdef'
混凝土。。。忽略NULL值,但| |表达式中的NULL whithin会使整个结果变为NULL
在JOOQ中,PostgreSQL方言中的DSL.concat使用| |-运算符呈现表达式:
Java: dsl.select(
DSL.concat(
DSL.inline("ABC"),
DSL.inline(null, SQLDataType.VARCHAR),
DSL.inline("def"))
).execute();
SQL: select ('ABC' || null || 'def')
Result: NULL
我在找优雅的?通过PostgreSQL中的JOOQ调用concat…-函数而不是| |-运算符的方法:
Java: dsl.select(???).execute();
SQL: select concat('ABC', null, 'def')
Result: 'ABCdef'
我找到了两种实现目标的方法 方法1:
dsl.select(
field(
"concat({0})",
SQLDataType.VARCHAR,
list(
inline("ABC"),
inline(null, SQLDataType.VARCHAR),
inline("def")
)
)
).execute();
这必须符合预期的行为,但在我看来必须是丑陋的concat{0}。在我看来,更优雅的方法是:
方法2:
dsl.select(
function(
"concat",
SQLDataType.VARCHAR,
inline("ABC"),
inline(null, SQLDataType.VARCHAR),
inline("def")
)
).execute();
此解决方案不涉及使用占位符作为方法1的内联SQL。为什么JOOQ生成| |而不是concat。。。不过,首先还有待阐述