量化LIKE谓词
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
jOOQ 还提供了合成的 [NOT] LIKE ANY
和 [NOT] LIKE ALL
运算符,可用于(肯定地或否定地)将字符串与多个模式进行匹配,而无需手动使用 AND
或 OR
将多个 [NOT] LIKE
谓词连接在一起(了解其他合成 sql 语法)。以下示例展示了这些合成谓词如何转换为 SQL
(TITLE LIKE '%abc%' OR TITLE LIKE '%def%') (TITLE NOT LIKE '%abc%' OR TITLE NOT LIKE '%def%') (TITLE LIKE '%abc%' AND TITLE LIKE '%def%') (TITLE NOT LIKE '%abc%' AND TITLE NOT LIKE '%def%')
BOOK.TITLE.like(any("%abc%", "%def%")) BOOK.TITLE.notLike(any("%abc%", "%def%")) BOOK.TITLE.like(all("%abc%", "%def%")) BOOK.TITLE.notLike(all("%abc%", "%def%"))
所有对应的 Java 方法 Field.like(QuantifiedSelect)
和 Field.notLike(QuantifiedSelect)
返回 LikeEscapeStep
的一个实例,可用于指定将应用于列表中所有模式的 ESCAPE
子句。为了简洁起见,上面的示例没有显示这一点。
请注意,LIKE ANY
和 LIKE ALL
谓词都允许将字符串与空模式列表进行匹配。 例如,对于 LIKE ANY
,这等效于 1 = 0
谓词,对于 NOT LIKE ALL
,其行为类似于 1 = 1
。
有关此谓词的二元版本,请参阅量化 LIKE 谓词(二元)。
方言支持
此示例使用 jOOQ
BOOK.TITLE.like(any(select(concat(val("%"), LANGUAGE.CD, val("%"))).from(LANGUAGE)))
翻译成以下特定方言的表达式
ASE、DB2、Firebird、Sybase、Teradata
1 = ANY ( SELECT CASE WHEN BOOK.TITLE LIKE pattern THEN 1 WHEN NOT (BOOK.TITLE LIKE pattern) THEN 0 END FROM ( SELECT ('%' || LANGUAGE.CD || '%') pattern FROM LANGUAGE ) t )
Aurora MySQL、MariaDB、MySQL
TRUE = ANY ( SELECT (BOOK.TITLE LIKE pattern) FROM ( SELECT concat('%', LANGUAGE.CD, '%') pattern FROM LANGUAGE ) t )
Aurora Postgres、ClickHouse、CockroachDB、Postgres、Snowflake、YugabyteDB
BOOK.TITLE LIKE ANY ( SELECT ('%' || LANGUAGE.CD || '%') FROM LANGUAGE )
Derby、DuckDB、H2、HSQLDB、Oracle、Vertica
TRUE = ANY ( SELECT (BOOK.TITLE LIKE pattern) FROM ( SELECT ('%' || LANGUAGE.CD || '%') pattern FROM LANGUAGE ) t )
Hana
TRUE = ANY ( SELECT CASE WHEN BOOK.TITLE LIKE pattern THEN TRUE WHEN NOT (BOOK.TITLE LIKE pattern) THEN FALSE END FROM ( SELECT ('%' || LANGUAGE.CD || '%') pattern FROM LANGUAGE ) t )
Informix
CAST('t' AS boolean) = ANY ( SELECT CASE WHEN BOOK.TITLE LIKE pattern THEN CAST('t' AS boolean) WHEN NOT (BOOK.TITLE LIKE pattern) THEN CAST('f' AS boolean) END FROM ( SELECT ('%' || LANGUAGE.CD || '%') pattern FROM LANGUAGE ) t )
SQLServer
1 = ANY ( SELECT CASE WHEN BOOK.TITLE LIKE pattern THEN 1 WHEN NOT (BOOK.TITLE LIKE pattern) THEN 0 END FROM ( SELECT ('%' + LANGUAGE.CD + '%') pattern FROM LANGUAGE ) t )
Access、BigQuery、Databricks、Exasol、MemSQL、Redshift、SQLDataWarehouse、SQLite、Trino
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的反馈!