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