【发布时间】:2017-02-22 20:11:32
【问题描述】:
我一直在寻找在 jOOQ 中实现以下查询的方法,但找不到任何东西。
SELECT *
FROM tableName
WHERE 'this is a string' LIKE CONCAT('%', word ,'%')
提前致谢。
【问题讨论】:
标签: jooq
我一直在寻找在 jOOQ 中实现以下查询的方法,但找不到任何东西。
SELECT *
FROM tableName
WHERE 'this is a string' LIKE CONCAT('%', word ,'%')
提前致谢。
【问题讨论】:
标签: jooq
这里有两点值得一提:
LIKE谓词左侧创建绑定变量只需为此使用DSL.val(String),例如:
Field<String> field = val("this is a string");
然后您可以在查询中使用它,就像任何其他 Field
为此使用DSL.concat(Field...) 方法。例如:
Field<String> concatenated = concat(inline("%"), TABLENAME.WORD, inline("%"));
请注意,我在这里使用的是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();
【讨论】:
如果你这样使用它会起作用
SELECT * FROM TableName WHERE ColumnName LIKE CONCAT('%','item', '%')
jOOQ 会是这样的
DSLContext create = DSL.using(connection, dialect);
CREATE.Select * .from(TableName).WHERE
(TableName.ColumnName.LIKE CONCAT ('%item%'))
.EXECUTE()
【讨论】: