تُجري جميع الدوال في هذا القسم البحث بشكل حساس لحالة الأحرف افتراضيًا. وعادةً ما تتوفر صيغ دوال منفصلة للبحث غير الحساس لحالة الأحرف.
تفترض الدوال في هذا القسم أيضًا أن السلسلة التي يُبحث فيها (ويُشار إليها في هذا القسم باسم haystack) وسلسلة البحث (ويُشار إليها في هذا القسم باسم needle) نصّان مرمَّزان بترميز أحادي البايت. وإذا لم يتحقق هذا الافتراض،
فلا يُطرَح أي استثناء وتكون النتائج غير معرّفة. وعادةً ما تتوفر صيغ دوال منفصلة للبحث في السلاسل المرمَّزة بـ UTF-8.
وبالمثل، إذا استُخدمت صيغة دالة لـ UTF-8 وكانت سلاسل الإدخال ليست نصًا مرمَّزًا بـ UTF-8، فلا يُطرَح أي استثناء وتكون
النتائج غير معرّفة. لاحظ أيضًا أنه لا يُجرى أي تطبيع تلقائي لـ Unicode، ولكن يمكنك استخدام دوال
normalizeUTF8*() لهذا الغرض.
يُشرح كلٌّ من الدوال العامة للسلاسل ودوال الاستبدال في السلاسل بشكل منفصل.
countMatches
أُضيف في: v21.1.0
يعيد عدد مرات تطابق تعبير نمطي داخل سلسلة نصية.
البنية
countMatches(haystack, pattern)الوسيطات
القيمة المعادة
يعيد عدد المطابقات التي عُثر عليها. UInt64
أمثلة
عدّ تسلسلات الأرقام
SELECT countMatches('hello 123 world 456 test', '[0-9]+')┌─countMatches('hello 123 world 456 test', '[0-9]+')─┐
│ 2 │
└────────────────────────────────────────────────────┘countMatchesCaseInsensitive
استُحدث في: v21.1.0
مشابه لـ countMatches، لكنه يُجري مطابقة تتجاهل حالة الأحرف.
البنية
countMatchesCaseInsensitive(haystack, pattern)الوسيطات
haystack— السلسلة النصية المراد البحث فيها.Stringpattern— نمط تعبير نمطي.const String
القيمة المعادة
يعيد عدد المطابقات التي تم العثور عليها. UInt64
أمثلة
العدّ دون تمييز بين الأحرف الكبيرة والصغيرة
SELECT countMatchesCaseInsensitive('Hello HELLO world', 'hello')┌─countMatchesCaseInsensitive('Hello HELLO world', 'hello')─┐
│ 2 │
└───────────────────────────────────────────────────────────┘countSubstrings
أُضيف في: v21.1.0
يُرجع عدد مرات ظهور السلسلة الفرعية needle ضمن السلسلة haystack.
البنية
countSubstrings(haystack, needle[, start_pos])المعاملات
haystack— السلسلة التي يُجرى البحث فيها. String أو Enum. -needle— السلسلة الفرعية المطلوب البحث عنها. String. -start_pos— الموضع (بدءًا من 1) فيhaystackالذي يبدأ منه البحث. UInt. اختياري.
القيمة المُعادة
عدد مرات الظهور. UInt64
أمثلة
مثال على الاستخدام
SELECT countSubstrings('aaaa', 'aa');┌─countSubstrings('aaaa', 'aa')─┐
│ 2 │
└───────────────────────────────┘باستخدام الوسيط start_pos
SELECT countSubstrings('abc___abc', 'abc', 4);┌─countSubstrings('abc___abc', 'abc', 4)─┐
│ 1 │
└────────────────────────────────────────┘countSubstringsCaseInsensitive
قُدِّمت في: v21.1.0
مثل countSubstrings، لكنه يحسب بغض النظر عن حالة الأحرف.
الصياغة
countSubstringsCaseInsensitive(haystack, needle[, start_pos])الوسائط
haystack— السلسلة التي يُجرى فيها البحث.StringأوEnumneedle— السلسلة الفرعية المطلوب البحث عنها.Stringstart_pos— اختياري. الموضع (بدءًا من 1) فيhaystackالذي يبدأ منه البحث.UInt*
القيمة المُعادة
يُرجع عدد مرات ظهور needle في haystack. UInt64
أمثلة
مثال على الاستخدام
SELECT countSubstringsCaseInsensitive('AAAA', 'aa');┌─countSubstringsCaseInsensitive('AAAA', 'aa')─┐
│ 2 │
└──────────────────────────────────────────────┘باستخدام الوسيطة start_pos
SELECT countSubstringsCaseInsensitive('abc___ABC___abc', 'abc', 4);┌─countSubstringsCaseInsensitive('abc___ABC___abc', 'abc', 4)─┐
│ 2 │
└─────────────────────────────────────────────────────────────┘countSubstringsCaseInsensitiveUTF8
أُضيفت في: v21.1.0
مشابهة لـ countSubstrings، لكنها تحسب بدون حساسية لحالة الأحرف، وتفترض أن haystack عبارة عن سلسلة UTF-8.
الصيغة
countSubstringsCaseInsensitiveUTF8(haystack, needle[, start_pos])المعاملات
haystack— سلسلة UTF-8 يُجرى البحث فيها.StringأوEnumneedle— سلسلة فرعية يُبحث عنها.Stringstart_pos— اختياري. الموضع (ابتداءً من 1) فيhaystackالذي يبدأ منه البحث.UInt*
القيمة المُعادة
يعيد عدد مرات ظهور needle في haystack. UInt64
أمثلة
مثال على الاستخدام
SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА');┌─countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА')─┐
│ 4 │
└────────────────────────────────────────────────────────────────────┘مع الوسيطة start_pos
SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА', 13);┌─countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА', 13)─┐
│ 2 │
└────────────────────────────────────────────────────────────────────────┘extract
متوفر منذ: v1.1.0
يستخرج أول تطابق لتعبير نمطي في سلسلة نصية. إذا لم يطابق 'haystack' 'pattern'، فستُعاد سلسلة فارغة.
تستخدم هذه الدالة مكتبة RE2 للتعبيرات النمطية. يُرجى الرجوع إلى re2 للاطلاع على البنية المدعومة.
إذا كان التعبير النمطي يحتوي على مجموعات ملتقطة (أنماطًا فرعية)، فستطابق الدالة سلسلة الإدخال مع أول مجموعة ملتقطة.
البنية
extract(haystack, pattern)الوسيطات
haystack— السلسلة المراد الاستخراج منها.Stringpattern— تعبير نمطي، يحتوي عادةً على مجموعة التقاط.const String
القيمة المعادة
يعيد الجزء المستخرج على هيئة سلسلة. String
أمثلة
استخراج النطاق من البريد الإلكتروني
SELECT extract('test@clickhouse.com', '.*@(.*)$')┌─extract('test@clickhouse.com', '.*@(.*)$')─┐
│ clickhouse.com │
└────────────────────────────────────────────┘إذا لم توجد مطابقة، تُعاد سلسلة فارغة
SELECT extract('test@clickhouse.com', 'no_match')┌─extract('test@clickhouse.com', 'no_match')─┐
│ │
└────────────────────────────────────────────┘extractAll
أُضيفت في: v1.1.0
مثل extract، لكنها تُرجِع مصفوفة تضم جميع مطابقات التعبير النمطي في سلسلة نصية.
إذا لم يطابق 'haystack' التعبير النمطي 'pattern'، فستُرجَع مصفوفة فارغة.
إذا كان التعبير النمطي يحتوي على مجموعات ملتقطة (أنماط فرعية)، فستُطابِق الدالة سلسلة الإدخال مع أول مجموعة ملتقطة.
البنية
extractAll(haystack, pattern)الوسيطات
haystack— السلسلة التي تُستخرج منها المقاطع.Stringpattern— تعبير نمطي، وقد يتضمن اختياريًا مجموعات التقاط.const String
القيمة المعادة
يعيد مصفوفة من المقاطع المستخرجة. Array(String)
أمثلة
استخراج جميع الأرقام
SELECT extractAll('hello 123 world 456', '[0-9]+')┌─extractAll('hello 123 world 456', '[0-9]+')─┐
│ ['123','456'] │
└─────────────────────────────────────────────┘الاستخراج باستخدام مجموعة الالتقاط
SELECT extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@')┌─extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@')─┐
│ ['test','user'] │
└────────────────────────────────────────────────────────────────────┘extractAllGroupsHorizontal
أُضيفت في: v20.5.0
تطابق جميع مجموعات السلسلة النصية باستخدام التعبير النمطي الموفَّر، وتُرجع مصفوفة من المصفوفات، بحيث تحتوي كل مصفوفة على جميع القيم الملتقطة من المجموعة الملتقِطة نفسها، مرتبة حسب رقم المجموعة.
البنية
extractAllGroupsHorizontal(s, regexp)الوسيطات
s—سلسلة الإدخالالمطلوب الاستخراج منها.StringأوFixedStringregexp—تعبير نمطيلإجراء المطابقة.const Stringأوconst FixedString
القيمة المعادة
تعيد مصفوفة من المصفوفات، حيث تحتوي كل مصفوفة داخلية على جميع القيم الملتقطة من مجموعة ملتقطة واحدة عبر كل المطابقات. تحتوي المصفوفة الداخلية الأولى على جميع القيم الملتقطة من المجموعة 1، والثانية من المجموعة 2، وهكذا. وإذا لم يتم العثور على أي مطابقات، فستُعاد مصفوفة فارغة. Array(Array(String))
أمثلة
مثال على الاستخدام
WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractAllGroupsHorizontal(s, '< ([\\w\\-]+): ([^\\r\\n]+)');[['Server','Date','Content-Type','Connection'],['nginx','Tue, 22 Jan 2019 00:26:14 GMT','text/html; charset=UTF-8','keep-alive']]extractGroups
أُضيفت في: v20.5.0
يستخرج مجموعات الالتقاط من أول سلسلة فرعية يطابقها تعبير نمطي. ولاستخراج المجموعات من جميع المطابقات، استخدم extractAllGroupsHorizontal أو extractAllGroupsVertical.
الصيغة
extractGroups(s, regexp)المعاملات
s— سلسلة الإدخال المطلوب الاستخراج منها.StringأوFixedStringregexp— تعبير نمطي. يجب أن يحتوي على مجموعة ملتقطة واحدة على الأقل. ثابت.const Stringأوconst FixedString
القيمة المُعادة
إذا وُجد تطابق مع التعبير النمطي، فستُعاد مصفوفة تحتوي على المجموعات الملتقطة (1 إلى N، حيث إن N هو عدد المجموعات الملتقطة في regexp) لأول تطابق. وإذا لم يوجد تطابق، فستُعاد مصفوفة فارغة. Array(String)
أمثلة
مثال على الاستخدام
WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractGroups(s, '< ([\\w\\-]+): ([^\\r\\n]+)');['Server','nginx']hasAllTokens
أُضيف في: v25.10.0
مثل hasAnyTokens، لكنه يُرجِع 1 إذا كانت جميع الرموز في السلسلة أو المصفوفة needle تطابق السلسلة input، ويُرجِع 0 خلاف ذلك. إذا كان input عمودًا، فإنه يُرجِع جميع الصفوف التي تستوفي هذا الشرط.
قبل البحث، تُجزِّئ الدالة إلى رموز:
- الوسيط
input(دائمًا)، و - الوسيط
needle(إذا أُعطي على هيئة String) باستخدام مُجزِّئ الرموز المحدد للفهرس النصي. إذا لم يكن للعمود فهرس نصي معرّف، فسيُستخدم بدلًا منه مُجزِّئ الرموزsplitByNonAlpha. إذا كان الوسيطneedleمن النوع Array(String)، فسيُعامل كل عنصر في المصفوفة على أنه رمز — ولا تُجرى أي عملية إضافية لتجزئته إلى رموز. إذا كان الفهرس النصي يحتوي على تعبير معالج مسبق مُعدّ، فسيُطبَّق المعالج المسبق علىneedle(إذا أُعطي كـString) قبل تجزئته إلى رموز. إذا كان الفهرس النصي يحتوي على تعبير معالج لاحق مُعدّ، فسيُطبَّق المعالج اللاحق على رموزneedleورموزinput(أي على كليهما بعد التجزئة إلى رموز).
تُتجاهل الرموز المكررة. على سبيل المثال، تُعامل needles = ['ClickHouse', 'ClickHouse'] بنفس طريقة المعاملة مثل ['ClickHouse'].
البنية
hasAllTokens(input, needles[, tokenizer])الأسماء المستعارة: hasAllToken
الوسائط
input— عمود الإدخال.StringأوFixedStringأوNullable(String)أوNullable(FixedString)أوArray(String)أوArray(FixedString)أوArray(Nullable(String))أوArray(Nullable(FixedString))needles— الرموز المراد البحث عنها.StringأوArray(String)tokenizer— مُجزِّئ الرموز المميزّة المراد استخدامه. الوسيطات الصالحة هيsplitByNonAlphaوsplitByStringوsplitByRegexpوasciiCJKوchineseوicu('<locale>')وjapaneseوngramsوsparseGramsوarray. وهو اختياري، وإذا لم يُحدَّد صراحةً، فستكون القيمة الافتراضيةsplitByNonAlpha.const String
القيمة المُعادة
تُعيد 1 إذا تطابقت جميع العينات. وإلا فتُعيد 0. UInt8
أمثلة
استخدام أساسي مع سلسلة البحث
DROP TABLE IF EXISTS doc;
CREATE TABLE doc (
id UInt32,
msg String,
INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');
SELECT count() FROM doc WHERE hasAllTokens(msg, 'a\\d()');┌─count()─┐
│ 1 │
└─────────┘حدّد عبارات البحث المطلوب البحث عنها كما هي AS-IS (من دون تجزئة إلى رموز) في مصفوفة
DROP TABLE IF EXISTS doc;
CREATE TABLE doc (
id UInt32,
msg String,
INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');
SELECT count() FROM doc WHERE hasAllTokens(msg, ['a', 'd']);┌─count()─┐
│ 1 │
└─────────┘أنشئ عبارات البحث باستخدام الدالة tokens
DROP TABLE IF EXISTS doc;
CREATE TABLE doc (
id UInt32,
msg String,
INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');
SELECT count() FROM doc WHERE hasAllTokens(msg, tokens('a()d', 'splitByString', ['()', '\\']));┌─count()─┐
│ 1 │
└─────────┘استخدم مُجزِّئًا مخصّصًا باستخدام الوسيط الثالث
SELECT hasAllTokens('abcdef', 'abc', 'ngrams(3)');┌─hasAllTokens('abcdef', 'abc', 'ngrams(3)')─┐
│ 1 │
└────────────────────────────────────────────┘أمثلة استخدام الأعمدة من نوع Array وMap
DROP TABLE IF EXISTS log;
CREATE TABLE log (
id UInt32,
tags Array(String),
attributes Map(String, String),
INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO log VALUES
(1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
(2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});مثال على عمود من نوع Array
DROP TABLE IF EXISTS log;
CREATE TABLE log (
id UInt32,
tags Array(String),
attributes Map(String, String),
INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO log VALUES
(1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
(2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});
SELECT count() FROM log WHERE hasAllTokens(tags, 'clickhouse');┌─count()─┐
│ 1 │
└─────────┘مثال باستخدام mapKeys
DROP TABLE IF EXISTS log;
CREATE TABLE log (
id UInt32,
tags Array(String),
attributes Map(String, String),
INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO log VALUES
(1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
(2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});
SELECT count() FROM log WHERE hasAllTokens(mapKeys(attributes), ['address', 'log_level']);┌─count()─┐
│ 1 │
└─────────┘مثال على mapValues
DROP TABLE IF EXISTS log;
CREATE TABLE log (
id UInt32,
tags Array(String),
attributes Map(String, String),
INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO log VALUES
(1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
(2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});
SELECT count() FROM log WHERE hasAllTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']);┌─count()─┐
│ 0 │
└─────────┘hasAnyTokens
أُضيف في: v25.10.0
يعيد 1 إذا طابق رمز واحد على الأقل في السلسلة أو المصفوفة needle السلسلة input، ويعيد 0 خلاف ذلك. وإذا كانت input عمودًا، فإنه يعيد جميع الصفوف التي تستوفي هذا الشرط.
قبل البحث، تُجزِّئ الدالة إلى رموز
- الوسيط
input(دائمًا)، و - الوسيط
needle(إذا أُعطي على هيئة String) باستخدام مُقسِّم الرموز المحدد للفهرس النصي. وإذا لم يكن للعمود فهرس نصي معرّف، فسيُستخدم بدلًا من ذلك مُقسِّم الرموزsplitByNonAlpha. وإذا كان الوسيطneedleمن النوع Array(String)، فسيُعامل كل عنصر في المصفوفة على أنه رمز — ولا يحدث أي تجزئة إضافية إلى رموز. وإذا كان الفهرس النصي مهيأً بتعبير معالج مسبق، فسيُطبَّق المعالج المسبق علىneedle(إذا أُعطي على هيئةString) قبل التجزئة إلى رموز. وإذا كان الفهرس النصي مهيأً بتعبير معالج لاحق، فسيُطبَّق المعالج اللاحق على رموزneedleورموزinput(أي على كليهما بعد التجزئة إلى رموز).
تُتجاهل الرموز المكررة. فعلى سبيل المثال، ['ClickHouse', 'ClickHouse'] تُعامل بالطريقة نفسها مثل ['ClickHouse'].
البنية
hasAnyTokens(input, needles[, tokenizer])الأسماء المستعارة: hasAnyToken
الوسيطات
input— عمود الإدخال.StringأوFixedStringأوNullable(String)أوNullable(FixedString)أوArray(String)أوArray(FixedString)أوArray(Nullable(String))أوArray(Nullable(FixedString))needles— الرموز المراد البحث عنها.StringأوArray(String)tokenizer— مُقسِّم الرموز المستخدم. الوسيطات الصالحة هيsplitByNonAlphaوsplitByStringوsplitByRegexpوasciiCJKوchineseوicu('<locale>')وjapaneseوngramsوsparseGramsوarray. هذا الوسيط اختياري، وإذا لم يُحدَّد صراحةً، تكون القيمة الافتراضيةsplitByNonAlpha.const String
القيمة المعادة
تُرجِع 1 إذا وُجدت مطابقة واحدة على الأقل، وإلا فتُرجِع 0. UInt8
أمثلة
الاستخدام الأساسي مع نمط بحث نصي
DROP TABLE IF EXISTS doc;
CREATE TABLE doc (
id UInt32,
msg String,
INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');
SELECT count() FROM doc WHERE hasAnyTokens(msg, 'a\\d()');┌─count()─┐
│ 3 │
└─────────┘حدِّد سلاسل البحث المراد البحث عنها كما هي (من دون تجزئة إلى رموز) في مصفوفة
DROP TABLE IF EXISTS doc;
CREATE TABLE doc (
id UInt32,
msg String,
INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');
SELECT count() FROM doc WHERE hasAnyTokens(msg, ['a', 'd']);┌─count()─┐
│ 3 │
└─────────┘توليد أنماط البحث باستخدام الدالة tokens
DROP TABLE IF EXISTS doc;
CREATE TABLE doc (
id UInt32,
msg String,
INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\']))
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO doc VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,');
SELECT count() FROM doc WHERE hasAnyTokens(msg, tokens('a()d', 'splitByString', ['()', '\\']));┌─count()─┐
│ 3 │
└─────────┘أمثلة على استخدام أعمدة Array وMap
DROP TABLE IF EXISTS log;
CREATE TABLE log (
id UInt32,
tags Array(String),
attributes Map(String, String),
INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO log VALUES
(1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
(2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});مثال على عمود من نوع Array
DROP TABLE IF EXISTS log;
CREATE TABLE log (
id UInt32,
tags Array(String),
attributes Map(String, String),
INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO log VALUES
(1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
(2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});
SELECT count() FROM log WHERE hasAnyTokens(tags, 'clickhouse');┌─count()─┐
│ 1 │
└─────────┘مثال على استخدام mapKeys
DROP TABLE IF EXISTS log;
CREATE TABLE log (
id UInt32,
tags Array(String),
attributes Map(String, String),
INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO log VALUES
(1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
(2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});
SELECT count() FROM log WHERE hasAnyTokens(mapKeys(attributes), ['address', 'log_level']);┌─count()─┐
│ 2 │
└─────────┘مثال باستخدام mapValues
DROP TABLE IF EXISTS log;
CREATE TABLE log (
id UInt32,
tags Array(String),
attributes Map(String, String),
INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha),
INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array),
INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array)
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO log VALUES
(1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}),
(2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'});
SELECT count() FROM log WHERE hasAnyTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']);┌─count()─┐
│ 2 │
└─────────┘hasPhrase
أُضيف في: v26.4.0
يتحقق مما إذا كان input يحتوي على جميع الرموز من phrase بترتيب متتالٍ.
قبل البحث، تُجزِّئ الدالة كلًّا من الوسيطين input وphrase إلى رموز باستخدام مُقسِّم الرموز المحدد للفهرس النصي.
إذا لم يكن للعمود فهرس نصي مُعرّف، فسيُستخدم بدلًا من ذلك مُقسِّم الرموز splitByNonAlpha — ما لم يتم تمرير مُقسِّم رموز باعتباره الوسيط الثالث الاختياري.
يجب أن يكون وسيط مُقسِّم الرموز واحدًا من splitByNonAlpha أو splitByString أو splitByRegexp أو ngrams أو asciiCJK أو icu.
لاحظ أن splitByRegexp غير مدعوم لـ hasPhrase عندما يعرّف الفهرس النصي أيضًا معالجًا لاحقًا.
بخلاف hasToken وhasAnyTokens وhasAllTokens، تتطلب hasPhrase أن تظهر الرموز بالترتيب نفسه
ومن دون أي رموز فاصلة بينها. على سبيل المثال، تُرجع hasPhrase('the quick brown fox', 'quick fox') القيمة 0
لأن "brown" تظهر بين "quick" و"fox".
البنية
hasPhrase(input, phrase[, tokenizer])الأسماء المستعارة: matchPhrase
وسيطات الدالة
input— عمود الإدخال.StringأوFixedStringphrase— العبارة المراد البحث عنها.const Stringtokenizer— مُقسِّم الرموز المراد استخدامها. اختياري، والقيمة الافتراضية هيsplitByNonAlpha.const String
القيمة المعادة
تُرجع 1 إذا عُثر على العبارة كتسلسل متتالٍ من الرموز، وإلا فتُرجع 0. UInt8
أمثلة
مطابقة العبارة
SELECT hasPhrase('the quick brown fox jumps', 'quick brown')┌─hasPhrase('the quick brown fox jumps', 'quick brown')─┐
│ 1 │
└───────────────────────────────────────────────────────┘رموز غير متتالية
SELECT hasPhrase('the quick brown fox jumps', 'quick fox')┌─hasPhrase('the quick brown fox jumps', 'quick fox')─┐
│ 0 │
└─────────────────────────────────────────────────────┘hasSubsequence
أُضيف في الإصدار: v23.7.0
يتحقق مما إذا كان needle تسلسلاً فرعيًا من haystack. التسلسل الفرعي لسلسلة نصية هو تسلسل يمكن اشتقاقه من سلسلة أخرى بحذف بعض المحارف أو دون حذف أي محرف، من دون تغيير ترتيب المحارف المتبقية.
الصياغة
hasSubsequence(haystack, needle)الوسائط
haystack— السلسلة التي يُبحث فيها عن التسلسل الفرعي.Stringneedle— التسلسل الفرعي المطلوب البحث عنه.String
القيمة المعادة
يعيد 1 إذا كان needle تسلسلاً فرعياً من haystack، وإلا فيعيد 0. UInt8
أمثلة
فحص أساسي لتسلسل فرعي
SELECT hasSubsequence('Hello World', 'HlWrd')┌─hasSubsequence('Hello World', 'HlWrd')─┐
│ 1 │
└────────────────────────────────────────┘تعذّر العثور على تسلسل فرعي
SELECT hasSubsequence('Hello World', 'xyz')┌─hasSubsequence('Hello World', 'xyz')─┐
│ 0 │
└──────────────────────────────────────┘hasSubsequenceCaseInsensitive
استُحدثت في: v23.7.0
مثل hasSubsequence، لكنه يبحث مع تجاهل حالة الأحرف.
الصياغة
hasSubsequenceCaseInsensitive(haystack, needle)الوسيطات
haystack— السلسلة النصية التي يُجرى البحث ضمنها.Stringneedle— المتتالية الجزئية المراد البحث عنها.String
القيمة المُعادة
تُرجع 1 إذا كانت needle متتالية جزئية من haystack، وإلا فتُرجع 0. UInt8
أمثلة
مثال على الاستخدام
SELECT hasSubsequenceCaseInsensitive('garbage', 'ARG');┌─hasSubsequenceCaseInsensitive('garbage', 'ARG')─┐
│ 1 │
└─────────────────────────────────────────────────┘hasSubsequenceCaseInsensitiveUTF8
أُضيف في: v23.7.0
مثل hasSubsequenceUTF8، لكنه يبحث دون التفريق بين الأحرف الكبيرة والصغيرة.
الصياغة
hasSubsequenceCaseInsensitiveUTF8(haystack, needle)الوسيطات
haystack— سلسلة مرمّزة بـ UTF8 يُجرى البحث فيها.Stringneedle— سلسلة تسلسل فرعي مرمّزة بـ UTF8 يُبحث عنها.String
القيمة المعادة
تُرجِع 1 إذا كانت needle تسلسلاً فرعيًا من haystack، وإلا فتُرجِع 0. UInt8
أمثلة
مثال على الاستخدام
SELECT hasSubsequenceCaseInsensitiveUTF8('ClickHouse - столбцовая система управления базами данных', 'СИСТЕМА');┌─hasSubsequenceCaseInsensitiveUTF8('ClickHouse - столбцовая система управления базами данных', 'СИСТЕМА')─┐
│ 1 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────┘hasSubsequenceUTF8
قُدِّمت في: v23.7.0
تشبه hasSubsequence، لكنها تفترض أن haystack و needle سلسلتان نصيتان مرمَّزتان بترميز UTF-8.
البنية
hasSubsequenceUTF8(haystack, needle)الوسائط
القيمة المُعادة
تُرجع 1 إذا كان needle تسلسلاً فرعيًا من haystack، وإلا فتُرجع 0. UInt8
أمثلة
مثال على الاستخدام
SELECT hasSubsequenceUTF8('картошка', 'кошка');┌─hasSubsequenceUTF8('картошка', 'кошка')─┐
│ 1 │
└─────────────────────────────────────────┘تسلسل فرعي غير متطابق
SELECT hasSubsequenceUTF8('картошка', 'апельсин');┌─hasSubsequenceUTF8('картошка', 'апельсин')─┐
│ 0 │
└────────────────────────────────────────────┘hasToken
أُضيف في: v20.1.0
يتحقق مما إذا كان token المُعطى موجودًا في النص المراد البحث فيه.
يستخدم splitByNonAlpha كمُجزِّئ للرموز، أي إن token يُعرَّف بأنه أطول تتابع فرعي ممكن من المحارف المتتالية [0-9A-Za-z_] (الأرقام، ومحارف ASCII، والشرطة السفلية).
البنية
hasToken(haystack, token)الوسيطات
haystack— السلسلة النصية المطلوب البحث فيها.Stringtoken— التوكن المطلوب البحث عنه.const String
القيمة المُعادة
تُرجع 1 إذا عُثر على التوكن، و0 خلاف ذلك. UInt8
أمثلة
البحث عن توكن
SELECT hasToken('clickhouse test', 'test')┌─hasToken('clickhouse test', 'test')─┐
│ 1 │
└─────────────────────────────────────┘hasTokenCaseInsensitive
قُدِّمت في: v20.1.0
ينفّذ بحثًا غير حساس لحالة الأحرف عن needle داخل haystack باستخدام الفهرس tokenbf_v1.
الصياغة
hasTokenCaseInsensitive(haystack, needle)المعاملات
- لا شيء.
القيمة المُعادة
أمثلة
hasTokenCaseInsensitiveOrNull
أُضيفت في: v23.1.0
تُجري بحثًا عن needle داخل haystack غير حساس لحالة الأحرف باستخدام فهرس tokenbf_v1. وتُرجع NULL إذا كان needle غير صحيح التكوين.
الصيغة
hasTokenCaseInsensitiveOrNull(haystack, needle)المعاملات
- لا شيء.
القيمة المُعادة
أمثلة
hasTokenOrNull
قُدِّم في: v20.1.0
مثل hasToken، لكنه يُرجع NULL إذا كان الرمز غير مُشكَّل على نحو صحيح.
الصيغة
hasTokenOrNull(haystack, token)الوسيطات
haystack— السلسلة المراد البحث فيها. يجب أن تكون ثابتة.Stringtoken— الرمز المراد البحث عنه.const String
القيمة المُعادة
يُرجع 1 إذا عُثر على الرمز، و0 خلاف ذلك، وNULL إذا كان الرمز غير صحيح التكوين. Nullable(UInt8)
أمثلة
مثال على الاستخدام
SELECT hasTokenOrNull('apple banana cherry', 'ban ana');┌─hasTokenOrNull('apple banana cherry', 'ban ana')─┐
│ ᴺᵁᴸᴸ │
└──────────────────────────────────────────────────┘highlight
أُضيفت في: v26.4.0
تُبرز مواضع ظهور مصطلحات البحث في سلسلة نصية عبر إحاطتها بوسوم HTML.
تُجري الدالة مطابقة ASCII غير حساسة لحالة الأحرف. وإذا تداخلت عدة مصطلحات بحث أو كانت متجاورة في النص، فتُدمج الأجزاء المطابَقة في مقطع مميّز واحد.
الصياغة
highlight(haystack, needles[, open_tag, close_tag])الوسيطات
haystack— النص المراد البحث فيه.StringأوFixedStringneedles— مصفوفة من عبارات البحث المراد إبرازها.const Array(String)open_tag— وسم الفتح الذي يُدرج قبل كل تطابق. القيمة الافتراضية:<em>.const Stringclose_tag— وسم الإغلاق الذي يُدرج بعد كل تطابق. القيمة الافتراضية:</em>.const String
القيمة المُعادة
يُرجع النص المُدخل مع إحاطة العبارات المتطابقة بالوسوم المحددة. String
أمثلة
إبراز أساسي
SELECT highlight('The quick brown fox', ['quick', 'fox'])┌─highlight('The quick brown fox', ['quick', 'fox'])─┐
│ The <em>quick</em> brown <em>fox</em> │
└────────────────────────────────────────────────────┘الوسوم المخصّصة
SELECT highlight('Hello World', ['hello'], '<b>', '</b>')┌─highlight('Hello World', ['hello'], '<b>', '</b>')─┐
│ <b>Hello</b> World │
└────────────────────────────────────────────────────┘ilike
قُدِّم في: v20.6.0
مثل like، لكنه يبحث بدون مراعاة حالة الأحرف. ويدعم عبارة ESCAPE الاختيارية (راجع like).
البنية
ilike(haystack, pattern[, escape_character])
-- haystack ILIKE pattern [ESCAPE 'escape_character']الوسيطات
haystack— السلسلة النصية التي يُجرى فيها البحث.StringأوFixedStringpattern— نمط LIKE المطلوب مطابقته.Stringescape_character— سلسلة اختيارية مكوّنة من محرف واحد تُستخدم كمحرف هروب بدلًا من\. الافتراضي:\.String
القيمة المعادة
تُعيد 1 إذا كانت السلسلة تطابق نمط LIKE (غير حساس لحالة الأحرف)، وإلا تُعيد 0. UInt8
أمثلة
مثال على الاستخدام
SELECT ilike('ClickHouse', '%house%');┌─ilike('ClickHouse', '%house%')─┐
│ 1 │
└────────────────────────────────┘like
أُضيف في: v1.1.0
تُرجع ما إذا كانت السلسلة haystack تطابق تعبير LIKE pattern.
يمكن أن يحتوي تعبير LIKE على أحرف عادية والرموز الوصفية التالية:
- يشير
%إلى أي عدد من الأحرف كيفما كانت (بما في ذلك عدم وجود أي أحرف). - يشير
_إلى حرف واحد كيفما كان. - تُستخدم
\لإفلات القيم الحرفية%و_و\.
تعتمد المطابقة على UTF-8، فمثلًا يطابق _ نقطة الترميز Unicode ¥، التي تُمثَّل في UTF-8 باستخدام بايتين.
إذا لم تكن haystack أو تعبير LIKE صالحَين وفق UTF-8، فسيكون السلوك غير معرّف.
لا يُجرى أي تطبيع Unicode تلقائيًا، ويمكنك استخدام الدوال normalizeUTF8* لهذا الغرض.
للمطابقة مع % و_ و\ الحرفية (وهي محارف وصفية في LIKE)، أضف قبلها شرطة مائلة عكسية: \% و\_ و\\.
وتفقد الشرطة المائلة العكسية معناها الخاص (أي تُفسَّر حرفيًا) إذا سبقت حرفًا غير % أو _ أو \.
بالنسبة إلى تعابير LIKE من الشكل %needle%، تكون الدالة بالسرعة نفسها التي تتمتع بها الدالة position.
أما جميع تعابير LIKE الأخرى فتُحوَّل داخليًا إلى تعبير نمطي وتُنفَّذ بأداء مماثل للدالة match.
عبارة ESCAPE
تحدّد عبارة ESCAPE الاختيارية محرف هروب مخصّصًا (ويجب أن يكون محرف ASCII واحدًا).
عند تحديده، يستبدل محرف الهروب المخصّص الشرطة المائلة العكسية الافتراضية عند التعامل مع المحرفين الخاصين % و _.
يمكن لمحرف الهروب أن يُستخدم مع ثلاثة أشياء: % (علامة نسبة مئوية حرفية)، و_ (شرطة سفلية حرفية)، ونفسه (محرف هروب حرفي).
عند استخدام محرف هروب مخصّص، لا يعود للشرطة المائلة العكسية أي معنى خاص، وتُعامَل على أنها محرف حرفي.
البنية
like(haystack, pattern[, escape_character])
-- haystack LIKE pattern [ESCAPE 'escape_character']الوسيطات
haystack— السلسلة النصية التي يُجرى فيها البحث.StringأوFixedStringpattern— نمطLIKEالمستخدم للمطابقة. يمكن أن يحتوي على%(يطابق أي عدد من المحارف)، و_(يطابق محرفًا واحدًا)، و\كحرف هروب.Stringescape_character— سلسلة نصية اختيارية مكوّنة من محرف واحد تُستخدم كحرف هروب بدلًا من\. القيمة الافتراضية:\.String
القيمة المُعادة
تُعيد 1 إذا كانت السلسلة النصية تطابق نمط LIKE، وإلا فتُعيد 0. UInt8
أمثلة
مثال على الاستخدام
SELECT like('ClickHouse', '%House');┌─like('ClickHouse', '%House')─┐
│ 1 │
└──────────────────────────────┘محرف بدل واحد
SELECT like('ClickHouse', 'Click_ouse');┌─like('ClickHouse', 'Click_ouse')─┐
│ 1 │
└──────────────────────────────────┘نمط لا يتطابق
SELECT like('ClickHouse', '%SQL%');┌─like('ClickHouse', '%SQL%')─┐
│ 0 │
└─────────────────────────────┘بند ESCAPE
SELECT '50%off' LIKE '50#%off' ESCAPE '#';┌─like('50%off', '50#%off', '#')─┐
│ 1 │
└────────────────────────────────┘locate
أُضيفت في: v18.16.0
مثل position، ولكن مع تبديل الوسيطين haystack وlocate.
الصياغة
locate(needle, haystack[, start_pos])الوسيطات
needle— السلسلة الفرعية المطلوب البحث عنها.Stringhaystack— السلسلة التي يُجرى فيها البحث.StringأوEnumstart_pos— اختياري. الموضع فيhaystackالذي يبدأ منه البحث (مع بدء العد من 1).UInt
القيمة المُعادة
يعيد موضع البداية محسوبًا بالبايتات، بدءًا من 1، إذا عُثر على السلسلة الفرعية، و0 إذا لم يُعثر عليها. UInt64
أمثلة
الاستخدام الأساسي
SELECT locate('ca', 'abcabc')┌─locate('ca', 'abcabc')─┐
│ 3 │
└────────────────────────┘match
أُضيف في: v1.1.0
يتحقق مما إذا كانت السلسلة النصية المُدخلة تطابق نمط التعبير النمطي المُعطى.
تستخدم هذه الدالة مكتبة RE2 للتعبيرات النمطية. يُرجى الرجوع إلى re2 للاطلاع على الصياغة المدعومة.
تعمل المطابقة على افتراض UTF-8. فعلى سبيل المثال، يُستخدَم ¥ داخليًا على هيئة بايتين، لكن المطابقة تتعامل معه باعتباره نقطة ترميز واحدة.
يجب ألا يحتوي التعبير النمطي على بايتات NULL.
إذا لم تكن السلسلة النصية المُدخلَة أو النمط بتنسيق UTF-8 صالحين، فسيكون السلوك غير معرّف.
وعلى خلاف السلوك الافتراضي في re2، فإن . يطابق فواصل الأسطر. لتعطيل ذلك، أضف (?-s) في بداية النمط.
النمط غير مقيَّد. ولمطابقة السلسلة النصية بالكامل، قيِّد النمط بنفسك باستخدام ^ و $.
إذا كنت تريد فقط البحث عن سلاسل فرعية، فيمكنك استخدام الدالتين like أو position بدلًا من ذلك، إذ تعملان أسرع بكثير من هذه الدالة.
صياغة عامل التشغيل البديلة: haystack REGEXP pattern أو haystack ~ pattern (بنمط PostgreSQL).
الصياغة
match(haystack, pattern)الأسماء المستعارة: REGEXP_MATCHES
الوسيطات
haystack— سلسلة يُبحث فيها عن النمط.Stringpattern— نمط تعبير نمطي. يمكن أن يكون ثابتًا أو أن يأتي من عمود.String
القيمة المعادة
تُرجع 1 إذا كان هناك تطابق مع النمط، و0 خلاف ذلك. UInt8
أمثلة
مطابقة الأنماط الأساسية
SELECT match('Hello World', 'Hello.*')┌─match('Hello World', 'Hello.*')─┐
│ 1 │
└─────────────────────────────────┘النمط لا يتطابق
SELECT match('Hello World', 'goodbye.*')┌─match('Hello World', 'goodbye.*')─┐
│ 0 │
└───────────────────────────────────┘مطابقة جزء من سلسلة نصية
SELECT match('abcde', 'b.*d'), match('abcde', '^b.*d$')┌─match('abcde', 'b.*d')─┬─match('abcde', '^b.*d$')─┐
│ 1 │ 0 │
└────────────────────────┴──────────────────────────┘matchCaseInsensitive
أُضيف في: v26.8.0
تشبه match لكنها تطابق دون مراعاة حالة الأحرف.
تستخدم هذه الدالة مكتبة RE2 للتعبيرات النمطية. يُرجى الرجوع إلى re2 للاطلاع على الصياغة المدعومة.
صياغة عامل التشغيل البديلة: haystack ~* pattern (بنمط PostgreSQL).
الصياغة
matchCaseInsensitive(haystack, pattern)
-- haystack ~* patternالوسيطات
haystack— سلسلة يُبحث فيها عن النمط.Stringpattern— نمط تعبير نمطي. يمكن أن يكون ثابتًا أو أن يأتي من عمود.String
القيمة المعادة
تُرجع 1 إذا كان هناك تطابق مع النمط دون تمييز بين حالة الأحرف، و0 خلاف ذلك. UInt8
أمثلة
مثال على الاستخدام
SELECT matchCaseInsensitive('Hello World', 'hello.*'), 'Hello World' ~┌─matchCaseInsensitive('Hello World', 'hello.*')─┬─matchCaseInsensitive('Hello World', 'HELLO.*')─┐
│ 1 │ 1 │
└────────────────────────────────────────────────┴────────────────────────────────────────────────┘multiFuzzyMatchAllIndices
أُضيف في: v20.1.0
يشبه multiFuzzyMatchAny، لكنه يعيد مصفوفة بجميع الفهارس المطابقة لـ haystack، بأي ترتيب، ضمن مسافة تحرير ثابتة.
الصياغة
multiFuzzyMatchAllIndices(haystack, distance, [pattern1, pattern2, ..., patternN])الوسيطات
haystack— سلسلة يُجرى البحث فيها.Stringdistance— الحد الأقصى لمسافة التحرير للمطابقة التقريبية.UInt8pattern— مصفوفة من الأنماط المطلوب المطابقة معها.Array(String)
القيمة المعادة
يعيد مصفوفة تحتوي على جميع الفهارس (بدءًا من 1) التي تطابق haystack ضمن مسافة التحرير المحددة، بأي ترتيب. ويعيد مصفوفة فارغة إذا لم يتم العثور على أي تطابقات. Array(UInt64)
أمثلة
مثال على الاستخدام
SELECT multiFuzzyMatchAllIndices('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose', 'House']);┌─multiFuzzyMatchAllIndices('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose', 'House'])─┐
│ [3,1,4,2] │
└───────────────────────────────────────────────────────────────────────────────────────────────┘multiFuzzyMatchAny
أُضيف في: v20.1.0
مثل multiMatchAny، لكنه يعيد القيمة 1 إذا طابق أي نمط النص ضمن مسافة تحرير ثابتة.
تعتمد هذه الدالة على الميزة التجريبية في مكتبة hyperscan، وقد تكون بطيئة في بعض الحالات الحدّية.
يعتمد الأداء على قيمة مسافة التحرير والأنماط المستخدمة، لكنه يكون دائمًا أعلى كلفة مقارنةً بالنظائر غير التقريبية.
البنية
multiFuzzyMatchAny(haystack, distance, [pattern1, pattern2, ..., patternN])المعاملات
haystack— السلسلة التي يُجرى فيها البحث.Stringdistance— الحد الأقصى لمسافة التحرير للمطابقة التقريبية.UInt8pattern— اختياري. مصفوفة من الأنماط للمطابقة معها.Array(String)
القيمة المعادة
تُرجِع 1 إذا طابق أي نمط القيمة haystack ضمن مسافة التحرير المحددة، وإلا فتُرجِع 0. UInt8
أمثلة
مثال على الاستخدام
SELECT multiFuzzyMatchAny('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose']);┌─multiFuzzyMatchAny('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose'])─┐
│ 1 │
└───────────────────────────────────────────────────────────────────────────────┘multiFuzzyMatchAnyIndex
أُضيف في: v20.1.0
مثل multiFuzzyMatchAny، لكنه يُرجع أي فهرس يطابق haystack ضمن مسافة تحرير ثابتة.
الصياغة
multiFuzzyMatchAnyIndex(haystack, distance, [pattern1, pattern2, ..., patternn])الوسائط
haystack— السلسلة النصية التي يُجرى البحث فيها.Stringdistance— الحد الأقصى لمسافة التحرير للمطابقة التقريبية.UInt8pattern— مصفوفة من الأنماط المطلوب المطابقة معها.Array(String)
القيمة المعادة
يعيد فهرس أي نمط يطابق haystack ضمن مسافة التحرير المحددة (بدءًا من 1)، وإلا يعيد 0. UInt64
أمثلة
مثال على الاستخدام
SELECT multiFuzzyMatchAnyIndex('ClickHouse', 2, ['ClckHouse', 'ClickHose', 'ClickHouse']);┌─multiFuzzyMatchAnyIndex('ClickHouse', 2, ['ClckHouse', 'ClickHose', 'ClickHouse'])─┐
│ 2 │
└────────────────────────────────────────────────────────────────────────────────────┘multiMatchAllIndices
قُدِّمت في: v20.1.0
مثل multiMatchAny، لكنها تُرجع مصفوفة بجميع الفهارس التي تطابق haystack بأي ترتيب.
البنية
multiMatchAllIndices(haystack, [pattern1, pattern2, ..., patternn])الوسيطات
haystack— السلسلة التي يُجرى البحث فيها.Stringpattern— التعبيرات النمطية المطلوب المطابقة معها.String
القيمة المُعادة
مصفوفة تحتوي على جميع الفهارس (بدءًا من 1) التي تطابق haystack بأي ترتيب. وتُرجع مصفوفة فارغة إذا لم يتم العثور على أي تطابقات. Array(UInt64)
أمثلة
مثال على الاستخدام
SELECT multiMatchAllIndices('ClickHouse', ['[0-9]', 'House', 'Click', 'ouse']);┌─multiMatchAllIndices('ClickHouse', ['[0-9]', 'House', 'Click', 'ouse'])─┐
│ [3,2,4] │
└─────────────────────────────────────────────────────────────────────────┘multiMatchAny
أُضيفت في: v20.1.0
تحقّق مما إذا كان واحد على الأقل من عدة أنماط للتعبيرات النمطية يطابق النص المراد البحث فيه.
إذا كنت تريد فقط البحث عن عدة سلاسل فرعية داخل سلسلة نصية، يمكنك استخدام الدالة multiSearchAny بدلًا من ذلك، فهي أسرع بكثير من هذه الدالة.
البنية
multiMatchAny(haystack, pattern1[, pattern2, ...])الوسيطات
haystack— السلسلة التي يُبحث فيها عن الأنماط.Stringpattern1[, pattern2, ...]— مصفوفة تضم نمط تعبير نمطي واحدًا أو أكثر.Array(String)
القيمة المُعادة
تُرجع 1 إذا طابق أي نمط، و0 خلاف ذلك. UInt8
أمثلة
مطابقة عدة أنماط
SELECT multiMatchAny('Hello World', ['Hello.*', 'foo.*'])┌─multiMatchAny('Hello World', ['Hello.*', 'foo.*'])─┐
│ 1 │
└────────────────────────────────────────────────────┘لا يطابق أي نمط
SELECT multiMatchAny('Hello World', ['goodbye.*', 'foo.*'])┌─multiMatchAny('Hello World', ['goodbye.*', 'foo.*'])─┐
│ 0 │
└──────────────────────────────────────────────────────┘multiMatchAnyIndex
أُضيف في: v20.1.0
مثل multiMatchAny، لكنه يُرجع فهرس أي تطابق مع haystack.
الصيغة
multiMatchAnyIndex(haystack, [pattern1, pattern2, ..., patternn])الوسائط
haystack— سلسلة نصية يُجرى البحث فيها.Stringpattern— تعبيرات نمطية تجري المطابقة معها.Array(String)
القيمة المعادة
تعيد فهرس أول نمط مطابق (ابتداءً من 1)، أو 0 إذا لم يتم العثور على أي مطابقة. UInt64
أمثلة
مثال على الاستخدام
SELECT multiMatchAnyIndex('ClickHouse', ['[0-9]', 'House', 'Click']);┌─multiMatchAnyIndex('ClickHouse', ['[0-9]', 'House', 'Click'])─┐
│ 3 │
└───────────────────────────────────────────────────────────────┘multiSearchAllPositions
أُضيف في: v20.1.0
مثل position، لكنه يعيد مصفوفة من المواضع (بالبايت، بدءًا من 1) لعدة سلاسل فرعية needle ضمن سلسلة haystack.
لا تدعم جميع دوال multiSearch*() أكثر من 2^8 من قيم needle.
الصياغة
multiSearchAllPositions(haystack, needle1[, needle2, ...])الوسيطات
haystack— سلسلة يُجرى البحث فيها.Stringneedle1[, needle2, ...]— مصفوفة تضم سلسلة فرعية واحدة أو أكثر للبحث عنها.Array(String)
القيمة المعادة
تعيد مصفوفة تحتوي على موضع البداية بالبايت، مع بدء العد من 1، إذا عُثر على السلسلة الفرعية، و0 إذا لم يُعثر عليها. Array(UInt64)
أمثلة
البحث عن عدة سلاسل فرعية
SELECT multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])┌─multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])─┐
│ [0,13,0] │
└───────────────────────────────────────────────────────────────────┘multiSearchAllPositionsCaseInsensitive
أُضيف في: v20.1.0
يشبه multiSearchAllPositions، لكنه لا يميّز بين الأحرف الكبيرة والصغيرة.
الصيغة
multiSearchAllPositionsCaseInsensitive(haystack, needle1[, needle2, ...])الوسيطات
haystack— سلسلة نصية يُجرى البحث فيها.Stringneedle1[, needle2, ...]— مصفوفة تضم سلسلة فرعية واحدة أو أكثر للبحث عنها.Array(String)
القيمة المعادة
تعيد مصفوفة تتضمن موضع البداية بالبايتات مع بدء العد من 1 (إذا عُثر على السلسلة الفرعية)، و0 إذا لم يُعثر على السلسلة الفرعية. Array(UInt64)
أمثلة
بحث متعدد غير حساس لحالة الأحرف
SELECT multiSearchAllPositionsCaseInsensitive('ClickHouse',['c','h'])┌─multiSearchAllPositionsCaseInsensitive('ClickHouse', ['c', 'h'])─┐
│ [1,6] │
└──────────────────────────────────────────────────────────────────┘multiSearchAllPositionsCaseInsensitiveUTF8
أُضيف في: v20.1.0
مثل multiSearchAllPositionsUTF8، لكنه يتجاهل اختلاف حالة الأحرف.
البنية
multiSearchAllPositionsCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])الوسائط
haystack— سلسلة مرمّزة بترميز UTF-8 يُجرى البحث فيها.Stringneedle— سلاسل فرعية مرمّزة بترميز UTF-8 يُبحث عنها.Array(String)
القيمة المُعادة
مصفوفة بمواقع البداية بالبايت، مع بدء العد من 1 (إذا عُثر على السلسلة الفرعية). وتُرجع 0 إذا لم يُعثر على السلسلة الفرعية. Array
أمثلة
بحث UTF-8 غير متأثر بحالة الأحرف
SELECT multiSearchAllPositionsCaseInsensitiveUTF8('Здравствуй, мир!', ['здравствуй', 'МИР']);┌─multiSearchAllPositionsCaseInsensitiveUTF8('Здравствуй, мир!', ['здравствуй', 'МИР'])─┐
│ [1,13] │
└───────────────────────────────────────────────────────────────────────────────────────┘multiSearchAllPositionsUTF8
متوفرة منذ: v20.1.0
تشبه multiSearchAllPositions، لكنها تفترض أن haystack والسلاسل الفرعية needle عبارة عن سلاسل نصية مرمّزة بترميز UTF-8.
الصياغة
multiSearchAllPositionsUTF8(haystack, needle1[, needle2, ...])الوسيطات
haystack— سلسلة مرمّزة بترميز UTF-8 يُجرى البحث فيها.Stringneedle1[, needle2, ...]— مصفوفة من السلاسل الفرعية المرمّزة بترميز UTF-8 المطلوب البحث عنها.Array(String)
القيمة المعادة
تعيد مصفوفة تتضمّن مواضع البداية بالبايتات، محسوبةً ابتداءً من 1 (إذا عُثر على السلسلة الفرعية)، و0 إذا لم يُعثر على السلسلة الفرعية. Array
أمثلة
بحث متعدد في UTF-8
SELECT multiSearchAllPositionsUTF8('ClickHouse',['C','H'])┌─multiSearchAllPositionsUTF8('ClickHouse', ['C', 'H'])─┐
│ [1,6] │
└───────────────────────────────────────────────────────┘multiSearchAny
أُضيف في: v20.1.0
يتحقق مما إذا كانت واحدة على الأقل من السلاسل المطلوب البحث عنها تطابق السلسلة المراد البحث فيها.
توفّر الدوال multiSearchAnyCaseInsensitive، multiSearchAnyUTF8 وmultiSearchAnyCaseInsensitiveUTF8 صيغًا غير حساسة لحالة الأحرف و/أو صيغ UTF-8 لهذه الدالة.
الصيغة
multiSearchAny(haystack, needle1[, needle2, ...])الوسيطات
haystack— السلسلة التي يُجرى البحث فيها.Stringneedle1[, needle2, ...]— مصفوفة من السلاسل الفرعية المراد البحث عنها.Array(String)
القيمة المعادة
يعيد 1 عند وجود مطابقة واحدة على الأقل، وإلا يعيد 0. UInt8
أمثلة
البحث عن أي مطابقة
SELECT multiSearchAny('ClickHouse',['C','H'])┌─multiSearchAny('ClickHouse', ['C', 'H'])─┐
│ 1 │
└──────────────────────────────────────────┘multiSearchAnyCaseInsensitive
أُضيفت في: v20.1.0
مثل multiSearchAny، لكنه يتجاهل حالة الأحرف.
البنية
multiSearchAnyCaseInsensitive(haystack, [needle1, needle2, ..., needleN])الوسيطات
haystack— السلسلة التي يُجرى فيها البحث.Stringneedle— السلاسل الفرعية المطلوب البحث عنها.Array(String)
القيمة المعادة
يعيد 1 إذا وُجدت مطابقة واحدة على الأقل غير حسّاسة لحالة الأحرف، وإلا فيعيد 0. UInt8
أمثلة
بحث غير حسّاس لحالة الأحرف
SELECT multiSearchAnyCaseInsensitive('ClickHouse',['c','h'])┌─multiSearchAnyCaseInsensitive('ClickHouse', ['c', 'h'])─┐
│ 1 │
└─────────────────────────────────────────────────────────┘multiSearchAnyCaseInsensitiveUTF8
استُحدث في: v20.1.0
مثل multiSearchAnyUTF8 لكنه لا يميّز بين الأحرف الكبيرة والصغيرة.
الصياغة
multiSearchAnyCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])الوسيطات
haystack— سلسلة UTF-8 يُجرى فيها البحث.Stringneedle— سلاسل فرعية بترميز UTF-8 يُبحث عنها.Array(String)
القيمة المُعادة
تُرجع 1 إذا وُجدت مطابقة واحدة على الأقل دون حساسية لحالة الأحرف، وإلا فتُرجع 0. UInt8
أمثلة
في سلسلة UTF-8 'Здравствуйте'، تحقّق مما إذا كان الحرف 'з' (حرفًا صغيرًا) موجودًا
SELECT multiSearchAnyCaseInsensitiveUTF8('Здравствуйте',['з'])┌─multiSearchAnyCaseInsensitiveUTF8('Здравствуйте', ['з'])─┐
│ 1 │
└──────────────────────────────────────────────────────────┘multiSearchAnyUTF8
أُضيفت في: v20.1.0
مثل multiSearchAny، لكنها تفترض أن haystack والسلاسل الفرعية needle هي سلاسل نصية مرمّزة بترميز UTF-8.
الصيغة
multiSearchAnyUTF8(haystack, [needle1, needle2, ..., needleN])الوسيطات
haystack— سلسلة UTF-8 يُجرى البحث داخلها.Stringneedle— سلاسل فرعية بترميز UTF-8 يُبحث عنها.Array(String)
القيمة المُعادة
تُرجع 1 إذا وُجدت مطابقة واحدة على الأقل، وإلا فتُرجع 0 إذا لم توجد أي مطابقة. UInt8
أمثلة
باعتبار '你好,世界' ('Hello, world') سلسلة UTF-8، تحقّق مما إذا كانت السلسلة تحتوي على أي من الحرفين 你 أو 界
SELECT multiSearchAnyUTF8('你好,世界', ['你', '界']) AS result┌─result─┐
│ 1 │
└────────┘multiSearchFirstIndex
أُضيف في: v20.1.0
يبحث عن عدة سلاسل needle داخل سلسلة haystack (مع مراعاة حالة الأحرف)، ويُرجع فهرسًا يبدأ من 1 لأول needle يتم العثور عليه.
البنية
multiSearchFirstIndex(haystack, [needle1, needle2, ..., needleN])الوسائط
haystack— السلسلة النصية المطلوب البحث فيها.Stringneedles— مصفوفة من السلاسل النصية المطلوب البحث عنها.Array(String)
القيمة المُعادة
تعيد الفهرس الذي يبدأ من 1 (أي الموضع داخل مصفوفة needles) لأول needle يُعثر عليه في haystack. وتعيد 0 إذا لم يتم العثور على أي من عناصر needles. البحث حساس لحالة الأحرف. UInt64
أمثلة
مثال على الاستخدام
SELECT multiSearchFirstIndex('ClickHouse Database', ['Click', 'Database', 'Server']);┌─multiSearchFirstIndex('ClickHouse Database', ['Click', 'Database', 'Server'])─┐
│ 1 │
└───────────────────────────────────────────────────────────────────────────────┘السلوك المراعي لحالة الأحرف
SELECT multiSearchFirstIndex('ClickHouse Database', ['CLICK', 'Database', 'Server']);┌─multiSearchFirstIndex('ClickHouse Database', ['CLICK', 'Database', 'Server'])─┐
│ 2 │
└───────────────────────────────────────────────────────────────────────────────┘لم يتم العثور على أي تطابق
SELECT multiSearchFirstIndex('Hello World', ['goodbye', 'test']);┌─multiSearchFirstIndex('Hello World', ['goodbye', 'test'])─┐
│ 0 │
└───────────────────────────────────────────────────────────┘multiSearchFirstIndexCaseInsensitive
قُدِّمت في: v20.1.0
تعيد الفهرس i (ابتداءً من 1) لأول needle_i يتم العثور عليه من اليسار في السلسلة haystack، وتعيد 0 بخلاف ذلك.
يتجاهل حالة الأحرف.
البنية
multiSearchFirstIndexCaseInsensitive(haystack, [needle1, needle2, ..., needleN]الوسيطات
haystack— السلسلة النصية التي يُجرى فيها البحث.Stringneedle— السلاسل الفرعية المراد البحث عنها.Array(String)
القيمة المُعادة
يُرجع الفهرس (بدءًا من 1) لأول needle يُعثر عليه من جهة اليسار. وإذا لم توجد أي مطابقة، فستكون القيمة 0. UInt8
أمثلة
مثال على الاستخدام
SELECT multiSearchFirstIndexCaseInsensitive('hElLo WoRlD', ['World', 'Hello']);┌─multiSearchFirstIndexCaseInsensitive('hElLo WoRlD', ['World', 'Hello'])─┐
│ 1 │
└─────────────────────────────────────────────────────────────────────────┘multiSearchFirstIndexCaseInsensitiveUTF8
أُضيفت في: v20.1.0
تبحث عن عدة سلاسل needle داخل سلسلة haystack، من دون تمييز بين الأحرف الكبيرة والصغيرة مع دعم ترميز UTF-8، وتُرجع فهرسًا يبدأ من 1 لأول needle يتم العثور عليه.
الصيغة
multiSearchFirstIndexCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])الوسيطات
haystack— السلسلة النصية المطلوب البحث فيها.Stringneedles— مصفوفة من السلاسل النصية المطلوب البحث عنها.Array(String)
القيمة المُعادة
تُرجع الفهرس ذا الأساس 1 (أي الموضع في مصفوفة needles) لأول سلسلة يتم العثور عليها داخل haystack. وتُرجع 0 إذا لم يتم العثور على أي سلسلة. البحث غير حساس لحالة الأحرف، ويراعي ترميز المحارف UTF-8. UInt64
أمثلة
مثال على الاستخدام
SELECT multiSearchFirstIndexCaseInsensitiveUTF8('ClickHouse Database', ['CLICK', 'data', 'server']);┌─multiSearchFirstIndexCaseInsensitiveUTF8('ClickHouse Database', ['CLICK', 'data', 'server'])─┐
│ 1 │
└──────────────────────────────────────────────────────────────────────────────────────────────┘التعامل مع حالة الأحرف في UTF-8
SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Привет Мир', ['мир', 'ПРИВЕТ']);┌─multiSearchFirstIndexCaseInsensitiveUTF8('Привет Мир', ['мир', 'ПРИВЕТ'])─┐
│ 1 │
└───────────────────────────────────────────────────────────────────────────┘لم يتم العثور على أي تطابق
SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Hello World', ['goodbye', 'test']);┌─multiSearchFirstIndexCaseInsensitiveUTF8('Hello World', ['goodbye', 'test'])─┐
│ 0 │
└──────────────────────────────────────────────────────────────────────────────┘multiSearchFirstIndexUTF8
قُدِّمت في: v20.1.0
تُرجع الفهرس i (بدءًا من 1) لأول needle_i يتم العثور عليه من أقصى اليسار في السلسلة haystack، وتُرجع 0 بخلاف ذلك.
وتفترض أن haystack وneedle سلسلتان مرمّزتان بترميز UTF-8.
البنية
multiSearchFirstIndexUTF8(haystack, [needle1, needle2, ..., needleN])الوسيطات
haystack— سلسلة UTF-8 يُجرى البحث فيها.Stringneedle— مصفوفة من السلاسل الفرعية بترميز UTF-8 المطلوب البحث عنها.Array(String)
القيمة المعادة
يعيد الفهرس (بدءًا من 1) لأول needle يتم العثور عليه من جهة اليسار. وإذا لم توجد أي مطابقة، فتكون القيمة 0. UInt8
أمثلة
مثال على الاستخدام
SELECT multiSearchFirstIndexUTF8('Здравствуйте мир', ['мир', 'здравствуйте']);┌─multiSearchFirstIndexUTF8('Здравствуйте мир', ['мир', 'здравствуйте'])─┐
│ 1 │
└────────────────────────────────────────────────────────────────────────┘multiSearchFirstPosition
قُدِّمت في: v20.1.0
تشبه position، لكنها تُرجع الإزاحة الأولى في سلسلة haystack التي تطابق أيًا من سلاسل needle المتعددة.
توفّر الدوال multiSearchFirstPositionCaseInsensitive وmultiSearchFirstPositionUTF8 وmultiSearchFirstPositionCaseInsensitiveUTF8 أشكالًا غير حساسة لحالة الأحرف و/أو أشكال UTF-8 لهذه الدالة.
الصياغة
multiSearchFirstPosition(haystack, needle1[, needle2, ...])الوسيطات
haystack— السلسلة النصية التي يُجرى فيها البحث.Stringneedle1[, needle2, ...]— مصفوفة تضم سلسلة فرعية واحدة أو أكثر للبحث عنها.Array(String)
القيمة المعادة
يعيد أول إزاحة في سلسلة haystack تطابق أيًا من سلاسل needle المتعددة، وإلا فستكون 0 إذا لم يُعثر على أي تطابق. UInt64
أمثلة
البحث عن أول موضع
SELECT multiSearchFirstPosition('Hello World',['llo', 'Wor', 'ld'])┌─multiSearchFirstPosition('Hello World', ['llo', 'Wor', 'ld'])─┐
│ 3 │
└───────────────────────────────────────────────────────────────┘multiSearchFirstPositionCaseInsensitive
تم تقديمه في: v20.1.0
مثل multiSearchFirstPosition، لكنه لا يميّز بين الأحرف الكبيرة والصغيرة.
البنية
multiSearchFirstPositionCaseInsensitive(haystack, [needle1, needle2, ..., needleN])الوسيطات
haystack— السلسلة التي يُجرى فيها البحث.Stringneedle— مصفوفة من السلاسل الفرعية المطلوب البحث عنها.Array(String)
القيمة المعادة
تعيد أول إزاحة من اليسار في سلسلة haystack تطابق أيًّا من سلاسل needle. وتعيد 0 إذا لم توجد أي مطابقة. UInt64
أمثلة
أول موضع دون حساسية لحالة الأحرف
SELECT multiSearchFirstPositionCaseInsensitive('HELLO WORLD',['wor', 'ld', 'ello'])┌─multiSearchFirstPositionCaseInsensitive('HELLO WORLD', ['wor', 'ld', 'ello'])─┐
│ 2 │
└───────────────────────────────────────────────────────────────────────────────┘multiSearchFirstPositionCaseInsensitiveUTF8
أُضيف في: v20.1.0
يشبه multiSearchFirstPosition، لكنه يفترض أن haystack وneedle سلسلتان بترميز UTF-8 ولا يميّز بين الأحرف الكبيرة والصغيرة.
الصياغة
multiSearchFirstPositionCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN])المعاملات
haystack— سلسلة نصية بترميز UTF-8 يُجرى البحث فيها.Stringneedle— مصفوفة من السلاسل الفرعية بترميز UTF-8 المطلوب البحث عنها.Array(String)
القيمة المعادة
تعيد أول إزاحة في سلسلة haystack تطابق أيًّا من سلاسل needle المتعددة، مع تجاهل حالة الأحرف. وتعيد 0 إذا لم يتم العثور على أي تطابق. UInt64
أمثلة
اعثر على أول إزاحة في سلسلة UTF-8 'Здравствуй, мир' ('Hello, world') تطابق أيًّا من قيم needle المعطاة
SELECT multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['МИР', 'вст', 'Здра'])┌─multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['МИР', 'вст', 'Здра'])─┐
│ 1 │
└────────────────────────────────────────────────────────────────────────────────────────┘multiSearchFirstPositionUTF8
أُضيفت في: v20.1.0
مثل multiSearchFirstPosition، لكنه يفترض أن haystack وneedle سلسلتان نصيتان بترميز UTF-8.
البنية
multiSearchFirstPositionUTF8(haystack, [needle1, needle2, ..., needleN])الوسيطات
haystack— سلسلة UTF-8 يُجرى البحث ضمنها.Stringneedle— مصفوفة من المقاطع الفرعية بترميز UTF-8 المطلوب البحث عنها.Array(String)
القيمة المُعادة
أول إزاحة في سلسلة haystack تطابق أيًا من سلاسل needle المتعددة. تُعيد 0 إذا لم توجد أي مطابقة. UInt64
أمثلة
اعثر على أول إزاحة في سلسلة UTF-8 'Здравствуй, мир' ('Hello, world') تطابق أيًا من قيم needle المعطاة
SELECT multiSearchFirstPositionUTF8('Здравствуй, мир',['мир', 'вст', 'авст'])┌─multiSearchFirstPositionUTF8('Здравствуй, мир', ['мир', 'вст', 'авст'])─┐
│ 4 │
└─────────────────────────────────────────────────────────────────────────┘ngramDistance
أُضيفت في: v20.1.0
تحسب مسافة 4-gram بين سلسلتين نصيتين. ولهذا، تحسب الفرق المتماثل بين مجموعتين متعدّدتي العناصر من 4-grams ثم تقسّمه على مجموع عدد عناصرهما. كلما صغرت القيمة المُعادة، زاد التشابه بين السلسلتين النصيتين.
للبحث غير المتأثر بحالة الأحرف و/أو بتنسيق UTF8، استخدم الدوال ngramDistanceCaseInsensitive, ngramDistanceUTF8, ngramDistanceCaseInsensitiveUTF8.
البنية
ngramDistance(haystack, needle)الوسيطات
القيمة المُعادة
يُرجع عددًا من النوع Float32 بين 0 و1. وكلما صغرت القيمة المُعادة، زاد التشابه بين السلسلتين. Float32
أمثلة
حساب مسافة 4-gram
SELECT ngramDistance('ClickHouse', 'ClickHouses')┌─ngramDistance('ClickHouse', 'ClickHouses')─┐
│ 0.06666667 │
└────────────────────────────────────────────┘ngramDistanceCaseInsensitive
قُدِّمت في: v20.1.0
توفّر نسخة غير حساسة لحالة الأحرف من ngramDistance.
تحسب مسافة 4-gram بين سلسلتين نصيتين مع تجاهل حالة الأحرف.
كلما صغرت القيمة المُعادة، زاد التشابه بين السلسلتين النصيتين.
الصيغة
ngramDistanceCaseInsensitive(haystack, needle)المعاملات
القيمة المُعادة
تعيد رقمًا من النوع Float32 بين 0 و1. Float32
أمثلة
مسافة 4-gram بدون تمييز حالة الأحرف
SELECT ngramDistanceCaseInsensitive('ClickHouse','clickhouse')┌─ngramDistanceCaseInsensitive('ClickHouse', 'clickhouse')─┐
│ 0 │
└──────────────────────────────────────────────────────────┘ngramDistanceCaseInsensitiveUTF8
أُضيف في: v20.1.0
يوفّر إصدار UTF-8 من ngramDistance لا يراعي حالة الأحرف.
يفترض أن السلسلتين needle وhaystack مرمَّزتان بترميز UTF-8، ولا يراعي حالة الأحرف.
يحسب مسافة 3-gram بين سلسلتين بترميز UTF-8 دون مراعاة حالة الأحرف.
كلما صغرت القيمة المُعادة، زاد التشابه بين السلسلتين.
البنية
ngramDistanceCaseInsensitiveUTF8(haystack, needle)الوسائط
haystack— سلسلة المقارنة الأولى المرمّزة بترميز UTF-8.Stringneedle— سلسلة المقارنة الثانية المرمّزة بترميز UTF-8.String
القيمة المعادة
تعيد قيمة من نوع Float32 بين 0 و1. Float32
أمثلة
مسافة 3-gram غير الحساسة لحالة الأحرف في UTF-8
SELECT ngramDistanceCaseInsensitiveUTF8('abcde','CDE')┌─ngramDistanceCaseInsensitiveUTF8('abcde', 'CDE')─┐
│ 0.5 │
└──────────────────────────────────────────────────┘ngramDistanceUTF8
قُدِّمت في: v20.1.0
يوفّر إصدار UTF-8 من ngramDistance.
يفترض أن سلسلتي needle وhaystack مرمّزتان بترميز UTF-8.
يحسب مسافة 3-gram بين سلسلتين بترميز UTF-8.
كلما كانت القيمة المُعادة أصغر، زاد التشابه بين السلسلتين.
البنية
ngramDistanceUTF8(haystack, needle)الوسائط
haystack— سلسلة المقارنة الأولى المرمّزة بترميز UTF-8.Stringneedle— سلسلة المقارنة الثانية المرمّزة بترميز UTF-8.String
القيمة المُعادة
يعيد عددًا من نوع Float32 بين 0 و1. Float32
أمثلة
مسافة 3-gram بترميز UTF-8
SELECT ngramDistanceUTF8('abcde','cde')┌─ngramDistanceUTF8('abcde', 'cde')─┐
│ 0.5 │
└───────────────────────────────────┘ngramSearch
أُضيف في: v20.1.0
يتحقق مما إذا كانت مسافة 4-gram بين سلسلتين نصيتين أقل من أو تساوي عتبة محددة.
لإجراء بحث غير حساس لحالة الأحرف أو بتنسيق UTF8 أو كليهما، استخدم الدوال ngramSearchCaseInsensitive وngramSearchUTF8 وngramSearchCaseInsensitiveUTF8.
الصيغة
ngramSearch(haystack, needle)الوسيطات
القيمة المُعادة
تعيد 1 إذا كانت مسافة 4-gram بين السلسلتين أقل من العتبة أو تساويها (1.0 افتراضيًا)، وإلا فتعيد 0. UInt8
أمثلة
البحث باستخدام 4-grams
SELECT ngramSearch('ClickHouse', 'Click')┌─ngramSearch('ClickHouse', 'Click')─┐
│ 1 │
└────────────────────────────────────┘ngramSearchCaseInsensitive
أُضيفت في: v20.1.0
توفّر متغيّرًا غير حساس لحالة الأحرف من ngramSearch.
تحسب الفرق غير المتماثل بين سلسلة needle وسلسلة haystack، أي عدد مقاطع n-gram في needle مطروحًا منه العدد المشترك من مقاطع n-gram، ثم يُطبَّع على عدد مقاطع n-gram في needle.
تتحقق مما إذا كانت مسافة 4-gram بين سلسلتين أقل من أو تساوي threshold محددة، مع تجاهل حالة الأحرف.
البنية
ngramSearchCaseInsensitive(haystack, needle)الوسائط
القيمة المُعادة
تعيد 1 إذا كانت مسافة 4-gram بين السلسلتين أقل من العتبة أو تساويها (1.0 افتراضيًا)، وإلا فتعيد 0. UInt8
أمثلة
بحث غير حساس لحالة الأحرف باستخدام 4-grams
SELECT ngramSearchCaseInsensitive('Hello World','hello')┌─ngramSearchCaseInsensitive('Hello World', 'hello')─┐
│ 1 │
└────────────────────────────────────────────────────┘ngramSearchCaseInsensitiveUTF8
قُدِّم في: v20.1.0
يوفّر إصدارًا من ngramSearch يعمل على UTF-8 دون تمييز بين الأحرف الكبيرة والصغيرة.
يفترض أن haystack وneedle سلسلتان نصيتان بترميز UTF-8، ويتجاهل الفرق بين الأحرف الكبيرة والصغيرة.
يتحقق مما إذا كانت مسافة 3-gram بين سلسلتين نصيتين بترميز UTF-8 أقل من أو تساوي عتبة محددة، دون تمييز بين الأحرف الكبيرة والصغيرة.
الصيغة
ngramSearchCaseInsensitiveUTF8(haystack, needle)الوسيطات
القيمة المُعادة
يعيد 1 إذا كانت مسافة 3-gram بين السلسلتين أقل من العتبة أو تساويها (1.0 افتراضيًا)، وإلا فيعيد 0. UInt8
أمثلة
بحث UTF-8 غير حساس لحالة الأحرف باستخدام 3-grams
SELECT ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз')┌─ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз')─┐
│ 0.57142854 │
└──────────────────────────────────────────────────────────┘ngramSearchUTF8
قُدِّمت في: v20.1.0
توفّر إصدارًا بترميز UTF-8 من ngramSearch.
تفترض أن haystack وneedle سلسلتان نصيتان بترميز UTF-8.
يتحقق مما إذا كانت مسافة 3-gram بين سلسلتين نصيتين بترميز UTF-8 أقل من أو تساوي عتبة محددة.
البنية
ngramSearchUTF8(haystack, needle)الوسائط
القيمة المُعادة
يُرجع 1 إذا كانت مسافة 3-gram بين السلسلتين أقل من العتبة أو تساويها (1.0 افتراضيًا)، وإلا فيُرجع 0. UInt8
أمثلة
البحث في UTF-8 باستخدام 3-grams
SELECT ngramSearchUTF8('абвгдеёжз', 'гдеёзд')┌─ngramSearchUTF8('абвгдеёжз', 'гдеёзд')─┐
│ 0.5 │
└────────────────────────────────────────┘notILike
أُتيح في: v20.6.0
يتحقق مما إذا كانت السلسلة النصية لا تطابق نمطًا، مع تجاهل حالة الأحرف. يمكن أن يحتوي النمط على المحرفين الخاصين % و _ لمطابقة SQL LIKE. ويدعم عبارة ESCAPE الاختيارية (راجع like).
البنية
notILike(haystack, pattern[, escape_character])
-- haystack NOT ILIKE pattern [ESCAPE 'escape_character']الوسيطات
haystack— سلسلة الإدخال المراد البحث فيها.StringأوFixedStringpattern— نمط SQL LIKE المراد مطابقته. يطابق%أي عدد من المحارف (بما في ذلك الصفر)، ويطابق_محرفًا واحدًا فقط.Stringescape_character— سلسلة اختيارية من محرف واحد تُستخدَم كمحرف هروب بدلًا من\. القيمة الافتراضية:\.String
القيمة المُعادة
تعيد 1 إذا كانت السلسلة لا تطابق النمط (من دون حساسية لحالة الأحرف)، وإلا فتعيد 0. UInt8
أمثلة
مثال على الاستخدام
SELECT notILike('ClickHouse', '%house%');┌─notILike('ClickHouse', '%house%')─┐
│ 0 │
└───────────────────────────────────┘notLike
أُضيف في: v1.1.0
مماثلة لـ like، لكنها تنفي النتيجة. وتدعم بند ESCAPE الاختياري (راجع like).
الصيغة
notLike(haystack, pattern[, escape_character])
-- haystack NOT LIKE pattern [ESCAPE 'escape_character']الوسيطات
haystack— السلسلة التي يُجرى فيها البحث.StringأوFixedStringpattern— نمطLIKEالمراد مطابقته.Stringescape_character— سلسلة اختيارية مكوّنة من محرف واحد تُستخدم كمحرف هروب بدلًا من\. القيمة الافتراضية:\.String
القيمة المعادة
تُرجع 1 إذا كانت السلسلة لا تطابق نمط LIKE، وإلا فتُرجع 0. UInt8
أمثلة
مثال على الاستخدام
SELECT notLike('ClickHouse', '%House%');┌─notLike('ClickHouse', '%House%')─┐
│ 0 │
└──────────────────────────────────┘نمط غير متطابق
SELECT notLike('ClickHouse', '%SQL%');┌─notLike('ClickHouse', '%SQL%')─┐
│ 1 │
└────────────────────────────────┘notMatch
أُضيف في: v26.8.0
مشابهة للدالة match، لكنها تنفي النتيجة: تتحقق من أن السلسلة النصية لا تطابق نمط التعبير النمطي.
تستخدم هذه الدالة مكتبة RE2 للتعبيرات النمطية. يُرجى الرجوع إلى re2 للاطلاع على الصياغة المدعومة.
صياغة عامل التشغيل البديلة: haystack !~ pattern (بنمط PostgreSQL).
الصيغة
notMatch(haystack, pattern)
-- haystack !~ patternوسيطات الدالة
haystack— سلسلة يُبحث فيها عن النمط.Stringpattern— نمط تعبير نمطي. يمكن أن يكون ثابتًا أو أن يأتي من عمود.String
القيمة المعادة
تُرجع 0 إذا كان هناك تطابق مع النمط، و1 خلاف ذلك. UInt8
أمثلة
مثال على الاستخدام
SELECT notMatch('Hello World', 'Hello.*'), 'Hello World' !┌─notMatch('Hello World', 'Hello.*')─┬─notMatch('Hello World', 'goodbye.*')─┐
│ 0 │ 1 │
└────────────────────────────────────┴──────────────────────────────────────┘notMatchCaseInsensitive
أُضيف في: v26.8.0
تشبه matchCaseInsensitive، لكنها تنفي النتيجة: إذ تتحقق من أن السلسلة النصية لا تطابق نمط التعبير النمطي دون تمييز بين حالة الأحرف.
تستخدم هذه الدالة مكتبة RE2 للتعبيرات النمطية. يُرجى الرجوع إلى re2 للاطلاع على الصياغة المدعومة.
صياغة عامل التشغيل البديلة: haystack !~* pattern (بأسلوب PostgreSQL).
الصيغة
notMatchCaseInsensitive(haystack, pattern)
-- haystack !~* patternوسيطات الدالة
haystack— سلسلة يُبحث فيها عن النمط.Stringpattern— نمط تعبير نمطي. يمكن أن يكون ثابتًا أو أن يأتي من عمود.String
القيمة المعادة
تُرجع 0 إذا كان النمط يتطابق دون تمييز حالة الأحرف، و1 خلاف ذلك. UInt8
أمثلة
مثال على الاستخدام
SELECT notMatchCaseInsensitive('Hello World', 'hello.*'), 'Hello World' !┌─notMatchCaseInsensitive('Hello World', 'hello.*')─┬─notMatchCaseInsensitive('Hello World', 'GOODBYE.*')─┐
│ 0 │ 1 │
└───────────────────────────────────────────────────┴─────────────────────────────────────────────────────┘position
أُضيف في: v1.1.0
يعيد موضع السلسلة الفرعية needle داخل السلسلة haystack (بالبايتات، بدءًا من 1).
إذا كانت السلسلة الفرعية needle فارغة، فتُطبَّق القواعد التالية:
- إذا لم يتم تحديد
start_pos: فأعد1 - إذا كان
start_pos = 0: فأعد1 - إذا كان
start_pos >= 1وstart_pos <= length(haystack) + 1: فأعدstart_pos - بخلاف ذلك: فأعد
0
تنطبق القواعد نفسها أيضًا على الدوال locate، وpositionCaseInsensitive، وpositionUTF8، وpositionCaseInsensitiveUTF8.
الصيغة
position(haystack, needle[, start_pos])الوسيطات
haystack— السلسلة التي يُجرى البحث فيها.StringأوEnumneedle— السلسلة الفرعية المراد البحث عنها.Stringstart_pos— الموضع فيhaystackالذي يبدأ منه البحث (بترقيم يبدأ من 1). اختياري.UInt
القيمة المعادة
يعيد موضع البداية بالبايت، مع العد بدءًا من 1، إذا عُثر على السلسلة الفرعية، وإلا فتكون القيمة 0 إذا لم يُعثر عليها. UInt64
أمثلة
الاستخدام الأساسي
SELECT position('Hello, world!', '!')┌─position('Hello, world!', '!')─┐
│ 13 │
└────────────────────────────────┘مع الوسيطة start_pos
SELECT position('Hello, world!', 'o', 1), position('Hello, world!', 'o', 7)┌─position('Hello, world!', 'o', 1)─┬─position('Hello, world!', 'o', 7)─┐
│ 5 │ 9 │
└───────────────────────────────────┴───────────────────────────────────┘صيغة needle IN haystack
SELECT 6 = position('/' IN s) FROM (SELECT 'Hello/World' AS s)┌─equals(6, position(s, '/'))─┐
│ 1 │
└─────────────────────────────┘سلسلة فرعية لعبارة البحث الفارغة
SELECT position('abc', ''), position('abc', '', 0), position('abc', '', 1), position('abc', '', 2), position('abc', '', 3), position('abc', '', 4), position('abc', '', 5)┌─position('abc', '')─┬─position('abc', '', 0)─┬─position('abc', '', 1)─┬─position('abc', '', 2)─┬─position('abc', '', 3)─┬─position('abc', '', 4)─┬─position('abc', '', 5)─┐
│ 1 │ 1 │ 1 │ 2 │ 3 │ 4 │ 0 │
└─────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┘positionCaseInsensitive
أُضيف في: v1.1.0
مثل position، لكنه غير حساس لحالة الأحرف.
الصيغة
positionCaseInsensitive(haystack, needle[, start_pos])الأسماء المستعارة: instr
الوسيطات
haystack— السلسلة التي يُجرى البحث فيها.StringأوEnumneedle— السلسلة الفرعية المطلوب البحث عنها.Stringstart_pos— اختياري. الموضع (مع احتساب المواضع بدءًا من 1) فيhaystackالذي يبدأ منه البحث.UInt*
القيمة المُعادة
تعيد موضع البداية بالبايتات، مع احتساب المواضع بدءًا من 1، إذا عُثر على السلسلة الفرعية، وإلا فتعيد 0. UInt64
أمثلة
بحث غير حساس لحالة الأحرف
SELECT positionCaseInsensitive('Hello, world!', 'hello')┌─positionCaseInsensitive('Hello, world!', 'hello')─┐
│ 1 │
└───────────────────────────────────────────────────┘positionCaseInsensitiveUTF8
أُضيفت في: v1.1.0
مثل positionUTF8، لكنها تبحث مع تجاهل حالة الأحرف.
الصيغة
positionCaseInsensitiveUTF8(haystack, needle[, start_pos])المعاملات
haystack— السلسلة التي يُجرى البحث فيها.StringأوEnumneedle— السلسلة الفرعية المراد البحث عنها.Stringstart_pos— اختياري. الموضع فيhaystackالذي يبدأ منه البحث (مع احتساب الموضع الأول على أنه 1).UInt*
القيمة المُعادة
تعيد موضع البداية بالبايتات مع العد ابتداءً من 1 إذا عُثر على السلسلة الفرعية، وإلا فتعيد 0 إذا لم يُعثر عليها. UInt64
أمثلة
بحث UTF-8 غير حساس لحالة الأحرف
SELECT positionCaseInsensitiveUTF8('Привет мир', 'МИР')┌─positionCaseInsensitiveUTF8('Привет мир', 'МИР')─┐
│ 8 │
└──────────────────────────────────────────────────┘positionUTF8
أُضيف في: v1.1.0
يشبه position، لكنه يفترض أن haystack وneedle سلسلتان نصيتان مرمّزتان بترميز UTF-8.
الصيغة
positionUTF8(haystack, needle[, start_pos])الوسيطات
haystack— السلسلة التي يُجرى البحث فيها.StringأوEnumneedle— السلسلة الفرعية المراد البحث عنها.Stringstart_pos— اختياري. الموضع فيhaystackالذي يبدأ منه البحث (مع بدء العد من 1).UInt*
القيمة المُعادة
يُرجع موضع البداية بالبايتات مع احتساب المواضع ابتداءً من 1 إذا عُثر على السلسلة الفرعية، وإلا فستكون القيمة 0 إذا لم يُعثر عليها. UInt64
أمثلة
عدّ محارف UTF-8
SELECT positionUTF8('Motörhead', 'r')┌─positionUTF8('Motörhead', 'r')─┐
│ 5 │
└────────────────────────────────┘