可用版本:Dev (3.21) | 最新 (3.20)

量化 LIKE 谓词(二进制)

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

二进制合成运算符 [NOT] LIKE ANY[NOT] LIKE ALL 可用于(肯定地或否定地)将二进制字符串与多个模式匹配,而无需手动使用 ANDOR 将多个 [NOT] LIKE 谓词连接在一起(了解其他合成 SQL 语法)。以下示例展示了这些合成谓词如何转换为 SQL

(TITLE     LIKE CAST('%abc%' AS VARBINARY) OR
 TITLE     LIKE '%def%' AS VARBINARY))
(TITLE NOT LIKE CAST('%abc%' AS VARBINARY) OR
 TITLE NOT LIKE CAST('%def%' AS VARBINARY))
(TITLE     LIKE CAST('%abc%' AS VARBINARY) AND
 TITLE     LIKE CAST('%def%' AS VARBINARY))
(TITLE NOT LIKE CAST('%abc%' AS VARBINARY) AND
 TITLE NOT LIKE CAST('%def%' AS VARBINARY))
BOOK.TITLE.binaryLike(
  any("%abc%".getBytes(), "%def%".getBytes()))
BOOK.TITLE.notBinaryLike(
  any("%abc%".getBytes(), "%def%".getBytes()))
BOOK.TITLE.binaryLike(
  all("%abc%".getBytes(), "%def%".getBytes()))
BOOK.TITLE.notBinaryLike(
  all("%abc%".getBytes(), "%def%".getBytes()))

请注意,LIKE ANYLIKE ALL 谓词都允许将二进制字符串与空模式列表匹配。 例如,在 LIKE ANY 的情况下,这等效于 1 = 0 谓词;在 NOT LIKE ALL 的情况下,其行为类似于 1 = 1

有关此谓词的文本版本,请参见量化 LIKE 谓词

方言支持

此示例使用 jOOQ

BOOK.TITLE.binaryLike(any(select(binaryConcat(binaryConcat(val("%".getBytes()), LANGUAGE.CD.cast(VARBINARY)), val("%".getBytes()))).from(LANGUAGE)))

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

Aurora Postgres, Postgres, YugabyteDB

BOOK.TITLE LIKE ANY (
  SELECT ((CAST(E'\\045' AS bytea) || CAST(LANGUAGE.CD AS bytea)) || CAST(E'\\045' AS bytea))
  FROM LANGUAGE
)

ASE, Access, Aurora MySQL, BigQuery, ClickHouse, CockroachDB, DB2, Databricks, Derby, DuckDB, Exasol, Firebird, H2, HSQLDB, Hana, Informix, MariaDB, MemSQL, MySQL, Oracle, Redshift, SQLDataWarehouse, SQLServer, SQLite, Snowflake, Sybase, Teradata, Trino, Vertica

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

引用此页

反馈

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

The jOOQ Logo