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

量化LIKE谓词

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

jOOQ 还提供了合成的 [NOT] LIKE ANY[NOT] LIKE ALL 运算符,可用于(肯定地或否定地)将字符串与多个模式进行匹配,而无需手动使用 ANDOR 将多个 [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 ANYLIKE 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

反馈

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

The jOOQ Logo