This commit is contained in:
Han Fei 2024-04-01 17:06:54 +02:00
parent f5437d3055
commit fe8d4b5dfc
2 changed files with 32 additions and 29 deletions

View File

@ -74,6 +74,8 @@ SELECT
position('Hello, world!', 'o', 7)
```
Result:
``` text
┌─position('Hello, world!', 'o', 1)─┬─position('Hello, world!', 'o', 7)─┐
│ 5 │ 9 │
@ -491,7 +493,7 @@ ngramDistance(haystack, needle)
## ngramSearch
Like `ngramDistance` but calculates the non-symmetric difference between a `needle` string and a `haystack` string, i.e. the number of n-grams from needle minus the common number of n-grams normalized by the number of `needle` n-grams. Returns a Float32 between 0 and 1. The bigger the result is, the more likely `needle` is in the `haystack`. This function is useful for fuzzy string search. Also see function `soundex`.
Like `ngramDistance` but calculates the non-symmetric difference between a `needle` string and a `haystack` string, i.e. the number of n-grams from `needle` minus the common number of n-grams normalized by the number of `needle` n-grams. Returns a Float32 between 0 and 1. The bigger the result is, the more likely `needle` is in the `haystack`. This function is useful for fuzzy string search. Also see function `soundex`.
Functions `ngramSearchCaseInsensitive, ngramSearchUTF8, ngramSearchCaseInsensitiveUTF8` provide case-insensitive and/or UTF-8 variants of this function.
@ -610,7 +612,7 @@ Like `countMatches(haystack, pattern)` but matching ignores the case.
## regexpExtract
Extracts the first string in haystack that matches the regexp pattern and corresponds to the regex group index.
Extracts the first string in `haystack` that matches the regexp pattern and corresponds to the regex group index.
**Syntax**
@ -652,7 +654,7 @@ Result:
## hasSubsequence
Returns 1 if needle is a subsequence of haystack, or 0 otherwise.
Returns 1 if `needle` is a subsequence of `haystack`, or 0 otherwise.
A subsequence of a string is a sequence that can be derived from the given string by deleting zero or more elements without changing the order of the remaining elements.

View File

@ -29,17 +29,17 @@ position(haystack, needle[, start_pos])
**参数**
- `haystack` — 被检索查询字符串,类型为[String](../../sql-reference/syntax.md#syntax-string-literal).
- `needle` — 子字符串,类型为[String](../../sql-reference/syntax.md#syntax-string-literal).
- `start_pos` 在字符串`haystack` 中开始检索的位置(从1开始),类型为[UInt](../../sql-reference/data-types/int-uint.md),可选
- `needle`进行查询的子字符串,类型为[String](../../sql-reference/syntax.md#syntax-string-literal).
- `start_pos` 在字符串`haystack` 中开始检索的位置(从1开始),类型为[UInt](../../sql-reference/data-types/int-uint.md),可选
**返回值**
- 若子字符串存在,返回位置(以字节为单位,从 1 开始)。
- 如果不存在子字符串,返回0。
- 如果不存在子字符串,返回 0。
如果子字符串 `needle` 为空,则:
- 如果未指定 `start_pos`,返回 `1`
- 如果 `start_pos` 为 0,则返回 `1`
- 如果 `start_pos = 0`,则返回 `1`
- 如果 `start_pos >= 1``start_pos <= length(haystack) + 1`,则返回 `start_pos`
- 否则返回 `0`
@ -68,14 +68,16 @@ SELECT
position('Hello, world!', 'o', 1),
position('Hello, world!', 'o', 7)
```
结果:
``` text
┌─position('Hello, world!', 'o', 1)─┬─position('Hello, world!', 'o', 7)─┐
│ 5 │ 9 │
└───────────────────────────────────┴───────────────────────────────────┘
```
示例,语法别名 `needle IN haystack`:
示例,`needle IN haystack`:
```sql
SELECT 6 = position('/' IN s) FROM (SELECT 'Hello/World' AS s);
@ -154,11 +156,11 @@ SELECT positionUTF8('Motörhead', 'r');
## multiSearchAllPositions
类似于 [position](#position)返回多个在字符串 `haystack``needle` 子字符串的位置的数组(以字节为单位,从 1 开始)。
类似于 [position](#position) 但是返回多个在字符串 `haystack``needle` 子字符串的位置的数组(以字节为单位,从 1 开始)。
:::note
所有以 `multiSearch*()` 开头的函数最多支持2<sup>8</sup> 个`needle`.
所有以 `multiSearch*()` 开头的函数仅支持最多 2<sup>8</sup> 个`needle`.
:::
**语法**
@ -208,7 +210,7 @@ multiSearchFirstPosition(haystack, [needle1, needle2, …, needleN])
## multiSearchFirstIndex
在字符串`haystack`中匹配多个`needle`子字符串,从左开始任一匹配的子串,返回其索引 `i` (从1开始)如无法匹配则返回0。
在字符串`haystack`中匹配最左侧的`needle`子字符串<sub>i</sub>,返回其索引 `i` (从1开始)如无法匹配则返回0。
函数 `multiSearchFirstIndexCaseInsensitive`, `multiSearchFirstIndexUTF8``multiSearchFirstIndexCaseInsensitiveUTF8` 提供此函数的不区分大小写以及/或 UTF-8 变体。
@ -220,7 +222,6 @@ multiSearchFirstIndex(haystack, \[needle<sub>1</sub>, needle<sub>2</sub>, …, n
## multiSearchAny {#multisearchany}
Returns 1, if at least one string needle<sub>i</sub> matches the string `haystack` and 0 otherwise.
至少已有一个子字符串`needle`匹配 `haystack` 时返回1否则返回 0 。
函数 `multiSearchAnyCaseInsensitive`, `multiSearchAnyUTF8``multiSearchAnyCaseInsensitiveUTF8` 提供此函数的不区分大小写以及/或 UTF-8 变体。
@ -237,7 +238,6 @@ multiSearchAny(haystack, [needle1, needle2, …, needleN])
返回字符串 `haystack` 是否匹配正则表达式 `pattern` [re2正则语法参考](https://github.com/google/re2/wiki/Syntax)
匹配基于 UTF-8例如`.` 匹配 Unicode 代码点 `¥`,它使用两个字节以 UTF-8 表示。T正则表达式不得包含空字节。如果 `haystack` 或`pattern`不是有效的 UTF-8则此行为为undefined。
与 re2 的默认行为不同,`.` 会匹配换行符。要禁用此功能,请在模式前面添加`(?-s)`。
如果仅希望搜索子字符串,可以使用函数 [like](#like)或 [position](#position) 来替代,这些函数的性能比此函数更高。
@ -447,8 +447,8 @@ SELECT extractAllGroupsVertical('abc=111, def=222, ghi=333', '("[^"]+"|\\w+)=("[
不会自动执行 Unicode 规范化,您可以使用[normalizeUTF8*()](https://clickhouse.com/docs/zh/sql-reference/functions/string-functions/) 函数来执行此操作。
匹配字面上的 `%`, `_``/`(这些是 LIKE 元字符),请在其前面加上反斜杠:`\%`, `\_` 和 `\\`。
如果在反斜杠前使用`%`, `_``\` 字符,则反斜杠将失去其特殊含义(即被解释为字面值)。
如果需要匹配字符 `%`, `_``/`(这些是 LIKE 元字符),请在其前面加上反斜杠:`\%`, `\_` 和 `\\`。
如果在非 `%`, `_``\` 字符前使用反斜杠,则反斜杠将失去其特殊含义(即被解释为字面值)。
请注意ClickHouse 要求字符串中使用反斜杠 [也需要被转义](../syntax.md#string), 因此您实际上需要编写 `\\%`、`\\_` 和 `\\\\`
@ -483,7 +483,7 @@ like(haystack, pattern)
## ngramDistance
计算字符串`haystack` 和子字符串`needle`的4-gram距离。 为此,它计算两个 4-gram 多重集之间的对称差异,并通过它们的基数之和对其进行标准化。返回0-1之间的Float32。返回值越小代表字符串越相似. Throws an exception if constant `needle` or `haystack` arguments are more than 32Kb in size. If any of non-constant `haystack` or `needle` arguments is more than 32Kb in size, the distance is always 1.
计算字符串 `haystack` 和子字符串 `needle` 4-gram 距离。 为此,它计算两个 4-gram 多重集之间的对称差异,并通过它们的基数之和对其进行标准化。返回 0 到 1 之间的 Float32 浮点数。返回值越小,代表字符串越相似. 如果参数 `needle` or `haystack` 是常数且大小超过 32Kb则抛出异常。如果参数 `haystack``needle` 是非常数且大小超过 32Kb ,则返回值恒为 1。
函数 `ngramDistanceCaseInsensitive, ngramDistanceUTF8, ngramDistanceCaseInsensitiveUTF8` 提供此函数的不区分大小写以及/或 UTF-8 变体。
@ -495,11 +495,12 @@ ngramDistance(haystack, needle)
## ngramSearch
类似于`ngramDistance`,但计算`needle`字符串和`haystack`字符串之间的非对称差异即来自needle的n-gram数量减去由`needle`数量归一化的n-gram的公共数量n-gram。返回 0 到 1 之间的 Float32。结果越大needle越有可能在haystack中。该函数对于模糊字符串搜索很有用。另请参阅函数soundex
类似于`ngramDistance`,但计算`needle`字符串和 `haystack` 字符串之间的非对称差异,即来自 `needle` 的 n-gram 数量减去由`needle`数量归一化的 n-gram 的公共数量 n-gram。返回 0 到 1 之间的 Float32 浮点数。结果越大,`needle` 越有可能在 `haystack` 中。该函数对于模糊字符串搜索很有用。另请参阅函数 `soundex``。
函数 `ngramSearchCaseInsensitive, ngramSearchUTF8, ngramSearchCaseInsensitiveUTF8` 提供此函数的不区分大小写以及/或 UTF-8 变体。
:::note
UTF-8变体使用了3-gram距离。这些并不是完全公平的n-gram距离。我们使用2字节的哈希函数来哈希n-gram然后计算这些哈希表之间的(非)对称差异——可能会发生冲突。在使用UTF-8大小写不敏感格式时我们并不使用公平的tolower函数——我们将每个码点字节的第5位从零开始和如果字节超过一个的零字节的第一位置零——这对拉丁字母和大部分西里尔字母都有效。
UTF-8 变体使用了 3-gram 距离。这些并不是完全公平的 n-gram 距离。我们使用 2 字节的哈希函数来哈希 n-gram然后计算这些哈希表之间的(非)对称差异——可能会发生冲突。在使用 UTF-8 大小写不敏感格式时,我们并不使用公平的 `tolower` 函数——我们将每个码点字节的第 5 位(从零开始)和第零字节的第一个比特位位置为零(如果该串的大小超过一个字节)——这对拉丁字母和大部分西里尔字母都有效。
:::
**语法**
@ -512,7 +513,7 @@ ngramSearch(haystack, needle)
返回字符串 `haystack` 中子字符串 `needle` 出现的次数。
函数 `countSubstringsCaseInsensitive` and `countSubstringsCaseInsensitiveUTF8` 提供此函数的不区分大小写以及/或 UTF-8 变体。
函数 `countSubstringsCaseInsensitive` `countSubstringsCaseInsensitiveUTF8` 提供此函数的不区分大小写以及 UTF-8 变体。
**语法**
@ -522,9 +523,9 @@ countSubstrings(haystack, needle[, start_pos])
**参数**
- `haystack` — 被检索查询字符串,类型为[String](../../sql-reference/syntax.md#syntax-string-literal).
- `needle` — 子字符串,类型为[String](../../sql-reference/syntax.md#syntax-string-literal).
- `start_pos` 在字符串`haystack` 中开始检索的位置(从1开始),类型为[UInt](../../sql-reference/data-types/int-uint.md),可选
- `haystack` — 被搜索的字符串,类型为[String](../../sql-reference/syntax.md#syntax-string-literal).
- `needle`用于搜索的模式子字符串,类型为[String](../../sql-reference/syntax.md#syntax-string-literal).
- `start_pos` 在字符串`haystack` 中开始检索的位置(从 1 开始),类型为[UInt](../../sql-reference/data-types/int-uint.md),可选
**返回值**
@ -562,7 +563,7 @@ SELECT countSubstrings('abc___abc', 'abc', 4);
## countMatches
返回正则表达式成功匹配的次数。
返回正则表达式 `pattern``haystack`成功匹配的次数。
**语法**
@ -573,7 +574,7 @@ countMatches(haystack, pattern)
**参数**
- `haystack` — 输入的字符串,数据类型为[String](../../sql-reference/data-types/string.md).
- `pattern` — 正则表达式([re2正则语法参考](https://github.com/google/re2/wiki/Syntax) 必须包含group每个group用括号括起来。 如果 `pattern` 不包含group则会抛出异常。 数据类型为[String](../../sql-reference/data-types/string.md).
- `pattern` — 正则表达式([re2正则语法参考](https://github.com/google/re2/wiki/Syntax) 数据类型为[String](../../sql-reference/data-types/string.md).
**返回值**
@ -655,7 +656,7 @@ SELECT
## hasSubsequence
如果`needle`是`haystack`的子序列返回1返回0。
如果`needle`是`haystack`的子序列返回1返回0。
子序列是从给定字符串中删除零个或多个元素而不改变剩余元素的顺序得到的序列。
**语法**