||
-运算符和concat(...)
-函数在PostgreSQL中的行为不同。
select 'ABC'||NULL||'def';
-- Result: NULL
select concat('ABC', NULL, 'def');
-- Result: 'ABCdef'
字符串concat(...)
忽略NULL值,但||
表达式中的NULL会使整个结果变为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
型
我正在寻找(优雅的?)方法来调用concat(...)
-函数,而不是||
-操作符通过PostgreSQL中的JOOQ:
Java: dsl.select(???).execute();
SQL: select concat('ABC', null, 'def')
Result: 'ABCdef'
型
1条答案
按热度按时间ifsvaxew1#
我找到了两种方法来实现提出的目标。
方法一:
字符串
这有预期的行为,但需要在我眼中丑陋的
"concat({0})"
.从我的Angular 来看,一个更优雅的方法是:方法2:
型
这个解决方案不像方法#1那样涉及带有占位符的内联SQL。但是,为什么JOOQ首先生成
||
而不是concat(...)
还有待说明。