量化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
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的反馈!