Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JOOQ中执行PostgreSQL的concat()而不是| |的方法?_Postgresql_Jooq - Fatal编程技术网

在JOOQ中执行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(

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(
        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。。。不过,首先还有待阐述