Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

دوال استبدال السلاسل النصية

دوال السلاسل النصية العامة ودوال البحث داخل السلاسل النصية موضَّحة كلٌّ على حدة.

format

قُدِّم في: v20.1.0

نسّق سلسلة pattern باستخدام القيم (السلاسل النصية، والأعداد الصحيحة، وما إلى ذلك) المدرجة في الوسيطات، بطريقة مشابهة للتنسيق في بايثون. يمكن أن تحتوي سلسلة النمط على حقول استبدال محاطة بأقواس معقوفة {}. ويُعدّ أي شيء غير موجود داخل الأقواس نصًا حرفيًا، ويُنسخ كما هو إلى المخرجات. يمكن تمثيل القوس المعقوف الحرفي باستخدام قوسين: {{ و }}. يمكن أن تكون أسماء الحقول أرقامًا (تبدأ من الصفر) أو فارغة (وفي هذه الحالة تُسنَد إليها ضمنيًا أرقام متزايدة بالتتابع).

الصياغة

format(pattern, s0[, s1, ...])

المعاملات

  • pattern — سلسلة التنسيق التي تحتوي على عناصر نائبة. String
  • s0[, 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 — سلسلة الإدخال. String
  • replace — سلسلة الاستبدال const String
  • offset — عدد صحيح من النوع Int (بفهرسة تبدأ من 1). إذا كانت قيمة offset سالبة، فيُحسب من نهاية السلسلة s. Int
  • length — اختياري. عدد صحيح من النوع 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 — سلسلة الإدخال. String
  • replace — سلسلة الاستبدال. const String
  • offset — عدد صحيح من النوع 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 — سلسلة التنسيق التي تحتوي على محددات %. String
  • sub1, 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 — سلسلة الإدخال المراد البحث فيها. String
  • pattern — السلسلة الفرعية المطلوب العثور عليها واستبدالها. const String
  • replacement — السلسلة التي سيُستبدل بها النمط. 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 — سلسلة الإدخال المراد البحث فيها. String
  • pattern — السلسلة الفرعية المطلوب العثور عليها واستبدالها. const String
  • replacement — السلسلة التي سيُستبدل بها النمط. 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 — سلسلة الإدخال المراد البحث فيها. String
  • pattern — نمط التعبير النمطي المراد العثور عليه. const String
  • replacement — السلسلة التي سيُستبدل بها النمط، وقد تحتوي على استبدالات. 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 — سلسلة الإدخال المراد البحث فيها. String
  • pattern — نمط التعبير النمطي المطلوب العثور عليه. const String
  • replacement — السلسلة التي سيُستبدل بها النمط، وقد تتضمن استبدالات. 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 — سلسلة الإدخال المراد ترجمتها. String
  • from — سلسلة ASCII ثابتة تحتوي على الأحرف المراد استبدالها. const String
  • to — سلسلة 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 المُدخلة المراد تحويلها. String
  • from — سلسلة UTF-8 ثابتة تحتوي على الأحرف المراد استبدالها. const String
  • to — سلسلة UTF-8 ثابتة تحتوي على أحرف الاستبدال. const String

القيمة المُعادة

تعيد قيمة من نوع البيانات String. String

أمثلة

تحويل أحرف UTF-8

SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res;
┌─res──────────────┐
│ Munchener Strase │
└──────────────────┘
Navigation