jOOQ 中的字符串 LIKE 列

Phi*_*lip 2 jooq

我一直在寻找一种在 jOOQ 中实现以下查询的方法,但找不到任何东西。

SELECT *
FROM   tableName
WHERE  'this is a string' LIKE CONCAT('%', word ,'%')
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Luk*_*der 5

这里有两件事值得一提:

  1. LIKE如何在谓词左侧创建绑定变量
  2. 如何在 SQL 中创建串联

1. 绑定变量

仅用DSL.val(String)于此目的,例如:

Field<String> field = val("this is a string");
Run Code Online (Sandbox Code Playgroud)

然后您可以像其他任何查询一样在查询中使用它Field

2. 连接

使用DSL.concat(Field...)该方法。例如:

Field<String> concatenated = concat(inline("%"), TABLENAME.WORD, inline("%"));
Run Code Online (Sandbox Code Playgroud)

请注意,我DSL.inline(String)在这里使用,而不是val()因为这将创建一个字符串文字(内联绑定变量),而不是普通的绑定变量。更多信息请点击这里:

https://www.jooq.org/doc/latest/manual/sql-building/bind-values/inlined-parameters

完整查询:

DSL.using(configuration)
   .selectFrom(TABLENAME)
   .where(val("this is a string").like(concat(
        inline("%"), TABLENAME.WORD, inline("%")
    )))
   .fetch();
Run Code Online (Sandbox Code Playgroud)