可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

LIKE谓词

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

LIKE 谓词通常用于简单的支持通配符的模式匹配。

所有 SQL 数据库中支持的通配符为

  • _: (单字符通配符)
  • %: (多字符通配符)

使用 jOOQ,可以从任何列表达式创建 LIKE 谓词,如下所示

TITLE     LIKE '%abc%'
TITLE NOT LIKE '%abc%'
BOOK.TITLE.like("%abc%")
BOOK.TITLE.notLike("%abc%")

连接通配符

一种常见的做法是将通配符连接到实际表达式。 虽然连接在纯 SQL中是危险的,但在使用 DSL API 创建动态绑定值时是安全的

-- Generated SQL is using a bind variable
TITLE     LIKE '%abc%'
TITLE NOT LIKE '%abc%'
// abc might be user input
BOOK.TITLE.like("%" + abc "%")
BOOK.TITLE.notLike("%" + abc + "%")

使用 LIKE 谓词转义操作数

通常,您的模式可能包含任何通配符 "_""%",在这种情况下,您可能需要转义它们。 jOOQ 不会自动转义 like()notLike() 方法中的模式。 相反,您可以显式定义一个转义字符,如下所示

TITLE     LIKE '%The !%-Sign Book%' ESCAPE '!'
TITLE NOT LIKE '%The !%-Sign Book%' ESCAPE '!'
BOOK.TITLE.like("%The !%-Sign Book%", '!')
BOOK.TITLE.notLike("%The !%-Sign Book%", '!')

在上面的谓词表达式中,感叹号字符作为转义字符传递,以转义通配符 "!_""!%",以及转义字符本身:"!!"

有关使用 LIKE 谓词转义模式的更多详细信息,请参阅数据库手册。

jOOQ 使用 LIKE 谓词的便捷方法

jOOQ 还为使用 LIKE 谓词对字符串执行的常见操作提供了一些便捷方法。 典型的操作是“包含谓词”、“以谓词开头”、“以谓词结尾”等。

-- case insensitivity
LOWER(TITLE) LIKE LOWER('%abc%')
LOWER(TITLE) NOT LIKE LOWER('%abc%')

-- contains and similar methods
TITLE LIKE '%' || 'abc' || '%'
TITLE LIKE 'abc' || '%'
TITLE LIKE '%' || 'abc'
// case insensitivity
BOOK.TITLE.likeIgnoreCase("%abc%")
BOOK.TITLE.notLikeIgnoreCase("%abc%")

// contains and similar methods
BOOK.TITLE.contains("abc")
BOOK.TITLE.startsWith("abc")
BOOK.TITLE.endsWith("abc")

请注意,jOOQ 在上述某些谓词实现中转义了值中的 %_ 字符。 为简单起见,本手册中省略了这一点。

有关此谓词的二进制版本,请参阅LIKE 谓词(二进制)

方言支持

此示例使用 jOOQ

BOOK.TITLE.like("%abc%")

翻译成以下特定方言的表达式

所有方言

BOOK.TITLE LIKE '%abc%'
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo