量化 LIKE 谓词(二进制)
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
二进制合成运算符 [NOT] LIKE ANY
和 [NOT] LIKE ALL
可用于(肯定地或否定地)将二进制字符串与多个模式匹配,而无需手动使用 AND
或 OR
将多个 [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 ANY
和 LIKE 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
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!