دوال السلاسل النصية العامة ودوال البحث داخل السلاسل النصية موضَّحة كلٌّ على حدة.
format
قُدِّم في: v20.1.0
نسّق سلسلة pattern باستخدام القيم (السلاسل النصية، والأعداد الصحيحة، وما إلى ذلك) المدرجة في الوسيطات، بطريقة مشابهة للتنسيق في بايثون.
يمكن أن تحتوي سلسلة النمط على حقول استبدال محاطة بأقواس معقوفة {}.
ويُعدّ أي شيء غير موجود داخل الأقواس نصًا حرفيًا، ويُنسخ كما هو إلى المخرجات.
يمكن تمثيل القوس المعقوف الحرفي باستخدام قوسين: {{ و }}.
يمكن أن تكون أسماء الحقول أرقامًا (تبدأ من الصفر) أو فارغة (وفي هذه الحالة تُسنَد إليها ضمنيًا أرقام متزايدة بالتتابع).
الصياغة
format(pattern, s0[, s1, ...])المعاملات
pattern— سلسلة التنسيق التي تحتوي على عناصر نائبة.Strings0[, s1, ...]— قيمة واحدة أو أكثر لإحلالها في النمط.Any
القيمة المُعادة
تُرجع سلسلة نصية منسّقة. String
أمثلة
عناصر نائبة مرقّمة
SELECT format('{1} {0} {1}', 'World', 'Hello')┌─format('{1} {0} {1}', 'World', 'Hello')─┐
│ Hello World Hello │
└─────────────────────────────────────────┘الترقيم الضمني
SELECT format('{} {}', 'Hello', 'World')┌─format('{} {}', 'Hello', 'World')─┐
│ Hello World │
└───────────────────────────────────┘overlay
قُدِّمت في: v24.9.0
يستبدل جزءًا من السلسلة input بسلسلة أخرى هي replace، بدءًا من الفهرس offset بفهرسة تبدأ من 1.
صيغة
overlay(s, replace, offset[, length])وسيطات الدالة
s— سلسلة الإدخال.Stringreplace— سلسلة الاستبدالconst Stringoffset— عدد صحيح من النوعInt(بفهرسة تبدأ من 1). إذا كانت قيمةoffsetسالبة، فيُحسب من نهاية السلسلةs.Intlength— اختياري. عدد صحيح من النوعInt. يحددlengthطول المقطع داخل سلسلة الإدخالsالمراد استبداله. إذا لم يتم تحديدlength، فإن عدد البايتات المحذوفة منsيساوي طولreplace؛ وإلا تُحذفlengthبايت.Int
القيمة المُعادة
تعيد سلسلة بعد الاستبدال. String
أمثلة
استبدال بسيط
SELECT overlay('My father is from Mexico.', 'mother', 4) AS res;┌─res───────────────────────┐
│ My mother is from Mexico. │
└───────────────────────────┘الاستبدال مع تحديد الطول
SELECT overlay('My father is from Mexico.', 'dad', 4, 6) AS res;┌─res────────────────────┐
│ My dad is from Mexico. │
└────────────────────────┘overlayUTF8
أُضيف في: v24.9.0
يستبدل جزءًا من السلسلة s بسلسلة أخرى هي replace، بدءًا من الفهرس offset بفهرسة تبدأ من 1.
يفترض أن السلسلة تحتوي على نص مرمّز بترميز UTF-8 صالح.
إذا لم يتحقق هذا الافتراض، فلن يُطرَح أي استثناء وستكون النتيجة غير معرّفة.
الصيغة
overlayUTF8(s, replace, offset[, length])وسيطات الدالة
s— سلسلة الإدخال.Stringreplace— سلسلة الاستبدال.const Stringoffset— عدد صحيح من النوعInt(بفهرسة تبدأ من 1). إذا كانت قيمةoffsetسالبة، فيُحسب الموضع من نهاية سلسلة الإدخالs.(U)Int*length— اختياري. يحدد طول المقتطف داخل سلسلة الإدخالsالمطلوب استبداله. إذا لم يتم تحديدlength، فإن عدد الأحرف المُزالة منsيساوي طولreplace، وإلا فتُزالlengthأحرف.(U)Int*
القيمة المعادة
تعيد سلسلة نصية بعد الاستبدال. String
أمثلة
استبدال UTF-8
SELECT overlayUTF8('Mein Vater ist aus Österreich.', 'der Türkei', 20) AS res;┌─res────────────────────────────┐
│ Mein Vater ist aus der Türkei. │
└────────────────────────────────┘printf
أُضيف في: v24.8.0
تنسّق الدالة printf السلسلة المعطاة باستخدام القيم (مثل السلاسل النصية والأعداد الصحيحة والأعداد ذات الفاصلة العائمة وغيرها) المدرجة في الوسائط، على نحو مشابه لدالة printf في C++.
يمكن أن تحتوي سلسلة التنسيق على محددات تنسيق تبدأ بالمحرف %.
ويُعدّ أي شيء لا يقع ضمن % ومحدد التنسيق الذي يليه نصًا حرفيًا، ويُنسخ كما هو إلى المخرجات.
يمكن إفلات المحرف % الحرفي باستخدام %%.
يمكن أن تكون سلسلة التنسيق إما ثابتًا أو تعبير عمود، مما يتيح استخدام أنماط تنسيق مختلفة لكل صف.
البنية
printf(format[, sub1, sub2, ...])الوسائط
format— سلسلة التنسيق التي تحتوي على محددات%.Stringsub1, sub2, ...— اختياري. صفر أو أكثر من القيم لإدراجها في سلسلة التنسيق.Any
القيمة المُعادة
يعيد سلسلة منسّقة. String
أمثلة
تنسيق بأسلوب C++
SELECT printf('%%%s %s %d', 'Hello', 'World', 2024);┌─printf('%%%s %s %d', 'Hello', 'World', 2024)─┐
│ %Hello World 2024 │
└──────────────────────────────────────────────┘regexpQuoteMeta
أُضيف في: v20.1.0
يضيف شرطة مائلة عكسية قبل هذه المحارف ذات المعنى الخاص في التعبيرات النمطية: \0, \\, |, (, ), ^, $, ., [, ], ?, *, +, {, :, -.
ويختلف هذا التنفيذ قليلًا عن re2::RE2::QuoteMeta.
فهو يهرّب البايت الصفري على هيئة \0 بدلًا من \x00، ولا يهرّب إلا المحارف المطلوبة.
الصياغة
regexpQuoteMeta(s)المعاملات
s— سلسلة الإدخال النصية التي تحتوي على أحرف يجب عمل escape لها في التعابير النمطية.String
القيمة المُعادة
يُرجع سلسلة نصية مع عمل escape للأحرف الخاصة في التعابير النمطية. String
أمثلة
عمل escape للأحرف الخاصة في التعابير النمطية
SELECT regexpQuoteMeta('Hello. [World]? (Yes)*') AS res┌─res───────────────────────────┐
│ Hello\. \[World\]\? \(Yes\)\* │
└───────────────────────────────┘replaceAll
أُضيف في: v1.1.0
يستبدل جميع حالات ظهور السلسلة الفرعية pattern في haystack بالسلسلة replacement.
البنية
replaceAll(haystack, pattern, replacement)الأسماء المستعارة: replace
الوسيطات
haystack— سلسلة الإدخال المراد البحث فيها.Stringpattern— السلسلة الفرعية المطلوب العثور عليها واستبدالها.const Stringreplacement— السلسلة التي سيُستبدل بها النمط.const String
القيمة المُعادة
تُرجِع سلسلة استُبدلت فيها جميع تكرارات النمط. String
أمثلة
استبدال جميع التكرارات
SELECT replaceAll('Hello, Hello world', 'Hello', 'Hi') AS res;┌─res──────────┐
│ Hi, Hi world │
└──────────────┘replaceOne
تم تقديمه في: v1.1.0
يستبدل أول ظهور للسلسلة الفرعية pattern في haystack بالسلسلة replacement.
الصيغة
replaceOne(haystack, pattern, replacement)الوسائط
haystack— سلسلة الإدخال المراد البحث فيها.Stringpattern— السلسلة الفرعية المطلوب العثور عليها واستبدالها.const Stringreplacement— السلسلة التي سيُستبدل بها النمط.const String
القيمة المُعادة
يعيد سلسلة نصية بعد استبدال أول ظهور للنمط. String
أمثلة
استبدال أول ظهور
SELECT replaceOne('Hello, Hello world', 'Hello', 'Hi') AS res;┌─res─────────────┐
│ Hi, Hello world │
└─────────────────┘replaceRegexpAll
طُرحت في: v1.1.0
تشبه replaceRegexpOne، لكنها تستبدل جميع حالات ظهور النمط.
واستثناءً من ذلك، إذا طابق تعبير نمطي سلسلة فرعية فارغة، فلا يُجرى الاستبدال أكثر من مرة واحدة.
الصيغة
replaceRegexpAll(haystack, pattern, replacement)اسم مستعار: REGEXP_REPLACE
وسيطات الدالة
haystack— سلسلة الإدخال المراد البحث فيها.Stringpattern— نمط التعبير النمطي المراد العثور عليه.const Stringreplacement— السلسلة التي سيُستبدل بها النمط، وقد تحتوي على استبدالات.const String
القيمة المُعادة
يعيد سلسلةً استُبدلت فيها جميع المطابقات للتعبير النمطي. String
أمثلة
استبدال جميع الأحرف بنسخة مضاعفة
SELECT replaceRegexpAll('Hello123', '.', '\\0\\0') AS res┌─res──────────────┐
│ HHeelllloo112233 │
└──────────────────┘مثال على استبدال سلسلة فرعية فارغة
SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res┌─res─────────────────┐
│ here: Hello, World! │
└─────────────────────┘replaceRegexpOne
أُضيف في: v1.1.0
يستبدل أول ظهور للسلسلة الفرعية المطابقة للتعبير النمطي pattern (بصيغة re2) في haystack بالسلسلة replacement.
يمكن أن تحتوي replacement على استبدالات \0-\9.
تقابل الاستبدالات \1-\9 المجموعة الملتقِطة الأولى حتى التاسعة (المطابقة الفرعية)، بينما يقابل الاستبدال \0 المطابقة كاملةً.
لاستخدام المحرف \ حرفيًا في السلسلتين pattern أو replacement، قم بتهريبه باستخدام \.
ضع في اعتبارك أيضًا أن القيم الحرفية النصية تتطلب تهريبًا إضافيًا.
الصيغة
replaceRegexpOne(haystack, pattern, replacement)الوسائط
haystack— سلسلة الإدخال المراد البحث فيها.Stringpattern— نمط التعبير النمطي المطلوب العثور عليه.const Stringreplacement— السلسلة التي سيُستبدل بها النمط، وقد تتضمن استبدالات.const String
القيمة المُعادة
يعيد سلسلة جرى فيها استبدال أول تطابق للتعبير النمطي. String
أمثلة
تحويل تواريخ ISO إلى التنسيق الأمريكي
SELECT replaceRegexpOne(d, '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res
FROM values('d String', '2014-03-17', '2014-03-18', '2014-03-19')┌─res────────┐
│ 03/17/2014 │
│ 03/18/2014 │
│ 03/19/2014 │
└────────────┘نسخ سلسلة نصية عشر مرات
SELECT replaceRegexpOne('Hello, World!', '.*', '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0') AS res┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World! │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘translate
أُضيفت في: v22.7.0
تستبدل الأحرف في السلسلة s باستخدام مطابقة أحرف واحدًا لواحد تحددها السلسلتان from وto.
يجب أن تكون from وto سلسلتين ثابتتين من نوع ASCII.
إذا كان حجم from وto متساويًا، فسيُستبدل كل ظهور لأول حرف من first في s بأول حرف من to، ويُستبدل كل ظهور لثاني حرف من first في s بثاني حرف من to، وهكذا.
إذا كانت from تحتوي على أحرف أكثر من to، فستُحذف من s جميع ظهورات الأحرف الموجودة في نهاية from التي لا يقابلها حرف في to.
لا تعدّل الدالة الأحرف غير التابعة لـ ASCII في s.
البنية
translate(s, from, to)الوسيطات
s— سلسلة الإدخال المراد ترجمتها.Stringfrom— سلسلة ASCII ثابتة تحتوي على الأحرف المراد استبدالها.const Stringto— سلسلة ASCII ثابتة تحتوي على أحرف الاستبدال.const String
القيمة المُعادة
تعيد سلسلة بعد تطبيق تحويلات الأحرف عليها. String
أمثلة
تعيين الأحرف
SELECT translate('Hello, World!', 'delor', 'DELOR') AS res┌─res───────────┐
│ HELLO, WORLD! │
└───────────────┘أطوال متفاوتة
SELECT translate('clickhouse', 'clickhouse', 'CLICK') AS res┌─res───┐
│ CLICK │
└───────┘translateUTF8
ظهر في: v22.7.0
مثل translate، لكنه يفترض أن s وfrom وto سلاسل نصية مرمّزة بترميز UTF-8.
الصياغة
translateUTF8(s, from, to)الوسائط
s— سلسلة UTF-8 المُدخلة المراد تحويلها.Stringfrom— سلسلة UTF-8 ثابتة تحتوي على الأحرف المراد استبدالها.const Stringto— سلسلة UTF-8 ثابتة تحتوي على أحرف الاستبدال.const String
القيمة المُعادة
تعيد قيمة من نوع البيانات String. String
أمثلة
تحويل أحرف UTF-8
SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res;┌─res──────────────┐
│ Munchener Strase │
└──────────────────┘