ClickHouse/docs/tr/sql-reference/functions/string-search-functions.md
Ivan Blinkov d91c97d15d
[docs] replace underscores with hyphens (#10606)
* Replace underscores with hyphens

* remove temporary code

* fix style check

* fix collapse
2020-04-30 21:19:18 +03:00

18 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true e8cd92bba3 41 Arama Dizeleri İçin

Dizeleri Aramak için işlevler

Arama, tüm bu işlevlerde varsayılan olarak büyük / küçük harf duyarlıdır. Büyük / küçük harf duyarlı arama için ayrı Varyantlar vardır.

pozisyon (Samanlık, iğne), bulun (Samanlık, iğne)

1den başlayarak dizedeki bulunan alt dizenin konumunu (bayt cinsinden) döndürür.

Dize, tek baytlık kodlanmış bir metni temsil eden bir bayt kümesi içerdiği varsayımı altında çalışır. Bu varsayım karşılanmazsa ve bir karakter tek bir bayt kullanılarak temsil edilemezse, işlev bir istisna atmaz ve beklenmeyen bir sonuç döndürür. Karakter iki bayt kullanılarak temsil edilebilirse, iki bayt vb. kullanır.

Büyük / küçük harf duyarsız arama için işlevi kullanın positionCaseİnsensitive.

Sözdizimi

position(haystack, needle)

Takma ad: locate(haystack, needle).

Parametre

  • haystack — string, in which substring will to be searched. Dize.
  • needle — substring to be searched. Dize.

Döndürülen değerler

  • Alt dize bulunursa, bayt cinsinden başlangıç pozisyonu (1den sayma).
  • 0, alt dize bulunamadı.

Tür: Integer.

Örnekler

İfade “Hello, world!” tek baytla kodlanmış bir metni temsil eden bir bayt kümesi içerir. İşlev beklenen bazı sonuçları döndürür:

Sorgu:

SELECT position('Hello, world!', '!')

Sonuç:

┌─position('Hello, world!', '!')─┐
│                             13 │
└────────────────────────────────┘

Rusçadaki aynı ifade, tek bir bayt kullanılarak temsil edilemeyen karakterler içerir. İşlev beklenmedik bir sonuç verir (kullanım positionUTF8 çok bayt kodlu metin için işlev):

Sorgu:

SELECT position('Привет, мир!', '!')

Sonuç:

┌─position('Привет, мир!', '!')─┐
│                            21 │
└───────────────────────────────┘

positionCaseİnsensitive

Olarak aynı konum 1den başlayarak dizedeki bulunan alt dizenin konumunu (bayt cinsinden) döndürür. Büyük / küçük harf duyarlı bir arama için işlevi kullanın.

Dize, tek baytlık kodlanmış bir metni temsil eden bir bayt kümesi içerdiği varsayımı altında çalışır. Bu varsayım karşılanmazsa ve bir karakter tek bir bayt kullanılarak temsil edilemezse, işlev bir istisna atmaz ve beklenmeyen bir sonuç döndürür. Karakter iki bayt kullanılarak temsil edilebilirse, iki bayt vb. kullanır.

Sözdizimi

positionCaseInsensitive(haystack, needle)

Parametre

  • haystack — string, in which substring will to be searched. Dize.
  • needle — substring to be searched. Dize.

Döndürülen değerler

  • Alt dize bulunursa, bayt cinsinden başlangıç pozisyonu (1den sayma).
  • 0, alt dize bulunamadı.

Tür: Integer.

Örnek

Sorgu:

SELECT positionCaseInsensitive('Hello, world!', 'hello')

Sonuç:

┌─positionCaseInsensitive('Hello, world!', 'hello')─┐
│                                                 1 │
└───────────────────────────────────────────────────┘

positionUTF8

1den başlayarak dizedeki bulunan alt dizenin konumunu (Unicode noktalarında) döndürür.

Dizenin UTF-8 kodlanmış bir metni temsil eden bir bayt kümesi içerdiği varsayımı altında çalışır. Bu varsayım karşılanmazsa, işlev bir istisna atmaz ve beklenmeyen bir sonuç döndürür. Karakter iki Unicode noktası kullanılarak temsil edilebilirse, iki vb. kullanır.

Büyük / küçük harf duyarsız arama için işlevi kullanın positionCaseİnsensitiveUTF8.

Sözdizimi

positionUTF8(haystack, needle)

Parametre

  • haystack — string, in which substring will to be searched. Dize.
  • needle — substring to be searched. Dize.

Döndürülen değerler

  • Unicode noktalarında başlangıç pozisyonu (1den sayma), eğer alt dize bulundu.
  • 0, alt dize bulunamadı.

Tür: Integer.

Örnekler

İfade “Hello, world!” rusçada, tek noktalı kodlanmış bir metni temsil eden bir dizi Unicode noktası bulunur. İşlev beklenen bazı sonuçları döndürür:

Sorgu:

SELECT positionUTF8('Привет, мир!', '!')

Sonuç:

┌─positionUTF8('Привет, мир!', '!')─┐
│                                12 │
└───────────────────────────────────┘

İfade “Salut, étudiante!” karakter nerede bir nokta kullanılarak temsil edilebilir (U+00E9) veya iki puan (U+0065U+0301) fonksiyon bazı beklenmedik sonuç iade edilebilir:

Mektup için sorgu é bir Unicode noktasını temsil eden U+00E9:

SELECT positionUTF8('Salut, étudiante!', '!')

Sonuç:

┌─positionUTF8('Salut, étudiante!', '!')─┐
│                                     17 │
└────────────────────────────────────────┘

Mektup için sorgu , iki Unicode noktası temsil edilen U+0065U+0301:

SELECT positionUTF8('Salut, étudiante!', '!')

Sonuç:

┌─positionUTF8('Salut, étudiante!', '!')─┐
│                                     18 │
└────────────────────────────────────────┘

positionCaseİnsensitiveUTF8

Olarak aynı positionUTF8 ama büyük küçük harf duyarlı. 1den başlayarak dizedeki bulunan alt dizenin konumunu (Unicode noktalarında) döndürür.

Dizenin UTF-8 kodlanmış bir metni temsil eden bir bayt kümesi içerdiği varsayımı altında çalışır. Bu varsayım karşılanmazsa, işlev bir istisna atmaz ve beklenmeyen bir sonuç döndürür. Karakter iki Unicode noktası kullanılarak temsil edilebilirse, iki vb. kullanır.

Sözdizimi

positionCaseInsensitiveUTF8(haystack, needle)

Parametre

  • haystack — string, in which substring will to be searched. Dize.
  • needle — substring to be searched. Dize.

Döndürülen değer

  • Unicode noktalarında başlangıç pozisyonu (1den sayma), eğer alt dize bulundu.
  • 0, alt dize bulunamadı.

Tür: Integer.

Örnek

Sorgu:

SELECT positionCaseInsensitiveUTF8('Привет, мир!', 'Мир')

Sonuç:

┌─positionCaseInsensitiveUTF8('Привет, мир!', 'Мир')─┐
│                                                  9 │
└────────────────────────────────────────────────────┘

multiSearchAllPositions

Olarak aynı konum ama döner Array dizede bulunan karşılık gelen alt dizelerin konumlarının (bayt cinsinden). Pozisyonlar 1den başlayarak endekslenir.

Arama, dize kodlaması ve harmanlama ile ilgili olmayan bayt dizileri üzerinde gerçekleştirilir.

  • Büyük / küçük harf duyarlı ASCII arama için işlevi kullanın multiSearchAllPositionsCaseInsensitive.
  • UTF-8de arama yapmak için işlevi kullanın multiSearchAllPositionsUTF8.
  • Büyük / küçük harf duyarlı UTF-8 arama için multisearchallpositionscaseınsensitiveutf8 işlevini kullanın.

Sözdizimi

multiSearchAllPositions(haystack, [needle1, needle2, ..., needlen])

Parametre

  • haystack — string, in which substring will to be searched. Dize.
  • needle — substring to be searched. Dize.

Döndürülen değerler

  • Bayt cinsinden başlangıç pozisyonları dizisi (1den sayma), karşılık gelen alt dize bulunursa ve 0 bulunmazsa.

Örnek

Sorgu:

SELECT multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])

Sonuç:

┌─multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])─┐
│ [0,13,0]                                                          │
└───────────────────────────────────────────────────────────────────┘

multiSearchAllPositionsUTF8

Görmek multiSearchAllPositions.

multiSearchFirstPosition (Samanlık, [iğne1, iğne2, …, needleve])

Olarak aynı position ancak dizenin en soldaki ofsetini döndürür haystack bu bazı iğnelerle eşleşti.

Büyük/küçük harfe duyarsız arama veya / VE UTF-8 biçiminde kullanım işlevleri için multiSearchFirstPositionCaseInsensitive, multiSearchFirstPositionUTF8, multiSearchFirstPositionCaseInsensitiveUTF8.

multiSearchFirstİndex (Samanlık, [iğne1, iğne2, …, needleve])

Dizini döndürür i en soldaki bulunan iğnenin (1den başlayarak)ben diz inede haystack ve 0 aksi takdirde.

Büyük/küçük harfe duyarsız arama veya / VE UTF-8 biçiminde kullanım işlevleri için multiSearchFirstIndexCaseInsensitive, multiSearchFirstIndexUTF8, multiSearchFirstIndexCaseInsensitiveUTF8.

multiSearchAny (Samanlık, [iğne1, iğne2, …, needleve])

Döner 1, Eğer en az bir dize iğneben dize ile eşleşir haystack ve 0 aksi takdirde.

Büyük/küçük harfe duyarsız arama veya / VE UTF-8 biçiminde kullanım işlevleri için multiSearchAnyCaseInsensitive, multiSearchAnyUTF8, multiSearchAnyCaseInsensitiveUTF8.

!!! note "Not" Tamamı multiSearch* fonksiyonlar iğne sayısı 2den az olmalıdır8 uygulama şartname nedeniyle.

maç (Samanlık, desen)

Dize eşleşip eşleşmediğini denetler pattern düzenli ifade. Bir re2 düzenli ifade. Bu sözdizimi of the re2 düzenli ifadeler, Perl düzenli ifadelerin sözdiziminden daha sınırlıdır.

Eşleşmezse 0 veya eşleşirse 1 değerini döndürür.

Ters eğik çizgi sembolünün (\) normal ifadede kaçmak için kullanılır. Aynı sembol, dize değişmezlerinde kaçmak için kullanılır. Bu nedenle, normal bir ifadede sembolden kaçmak için, bir dize literalinde iki ters eğik çizgi (\) yazmanız gerekir.

Normal ifade, bir bayt kümesiymiş gibi dizeyle çalışır. Normal ifade boş bayt içeremez. Bir dizedeki alt dizeleri aramak için desenler için, LİKE veya position, çok daha hızlı çalıştıkları için.

multiMatchAny (Samanlık, [desen1, desen2, …, patternve])

Olarak aynı match, ancak normal ifadelerin hiçbiri eşleşmezse 0 ve desenlerden herhangi biri eşleşirse 1 değerini döndürür. Kullanır hyperscan kitaplık. Bir dizede alt dizeleri aramak için desenler için, kullanmak daha iyidir multiSearchAny çok daha hızlı çalıştığı için.

!!! note "Not" Herhangi birinin uzunluğu haystack dize 2den az olmalıdır32 bayt aksi takdirde özel durum atılır. Bu kısıtlama, hyperscan API nedeniyle gerçekleşir.

multimatchanyındex (haystack, [desen1, desen2, …, patternve])

Olarak aynı multiMatchAny, ancak Samanlık eşleşen herhangi bir dizin döndürür.

multiMatchAllİndices (haystack, [desen1, desen2, …, patternve])

Olarak aynı multiMatchAny, ancak herhangi bir sırada Samanlık eşleşen tüm indicies dizisini döndürür.

multiFuzzyMatchAny (Samanlık, mesafe, [desen1, desen2, …, patternve])

Olarak aynı multiMatchAny, ancak herhangi bir desen samanlıkta bir sabitle eşleşirse 1 döndürür mesafeyi Düzenle. Bu fonksiyon aynı zamanda deneysel bir moddadır ve son derece yavaş olabilir. Daha fazla bilgi için bkz. hyperscan belgeleri.

multifuzzymatchanyındex (Samanlık, mesafe, [desen1, desen2, …, patternve])

Olarak aynı multiFuzzyMatchAny, ancak sabit bir düzenleme mesafesi içinde Samanlık eşleşen herhangi bir dizin döndürür.

multiFuzzyMatchAllİndices (Samanlık, mesafe, [desen1, desen2, …, patternve])

Olarak aynı multiFuzzyMatchAny, ancak sabit bir düzenleme mesafesi içinde saman yığını ile eşleşen herhangi bir sırada tüm dizinlerin dizisini döndürür.

!!! note "Not" multiFuzzyMatch* işlevler UTF-8 normal ifadeleri desteklemez ve bu tür ifadeler hyperscan kısıtlaması nedeniyle bayt olarak kabul edilir.

!!! note "Not" Hyperscan kullanan tüm işlevleri kapatmak için, ayarı kullanın SET allow_hyperscan = 0;.

özü (Samanlık, desen)

Normal ifade kullanarak bir dize parçasını ayıklar. Eğer haystack eşleşmiyor pattern regex, boş bir dize döndürülür. Regex alt desenler içermiyorsa, tüm regex ile eşleşen parçayı alır. Aksi takdirde, ilk alt desenle eşleşen parçayı alır.

extractAll(Samanlık, desen)

Normal bir ifade kullanarak bir dizenin tüm parçalarını ayıklar. Eğer haystack eşleşmiyor pattern regex, boş bir dize döndürülür. Regex için tüm eşleşmelerden oluşan bir dizi dizeyi döndürür. Genel olarak, davranış ile aynıdır extract işlev (bir alt desen yoksa ilk alt deseni veya tüm ifadeyi alır).

gibi (Samanlık, desen), Samanlık gibi desen operatörü

Bir dizenin basit bir normal ifadeyle eşleşip eşleşmediğini denetler. Normal ifade metasymbols içerebilir % ve _.

% herhangi bir bayt miktarını (sıfır karakter dahil) gösterir.

_ herhangi bir bayt gösterir.

Ters eğik çizgi kullanın (\) metasimbollerden kaçmak için. Açıklamasında kaçan nota bakın match işlev.

Gibi düzenli ifadeler için %needle%, kod daha optimal ve hızlı olarak çalışır position işlev. Diğer normal ifadeler için kod, match işlev.

notLike (Samanlık, desen), Samanlık desen operatörü gibi değil

Aynı şey like ama negatif.

ngramDistance(Samanlık, iğne)

Arasındaki 4 gram distancelık mesaf theeyi hesaplar haystack ve needle: counts the symmetric difference between two multisets of 4-grams and normalizes it by the sum of their cardinalities. Returns float number from 0 to 1 the closer to zero, the more strings are similar to each other. If the constant needle veya haystack 32kbden fazla, bir istisna atar. Sabit olmayan bazı haystack veya needle dizeler 32kbden daha fazladır, mesafe her zaman birdir.

Büyük/küçük harf duyarsız arama veya / VE UTF-8 formatında kullanım işlevleri için ngramDistanceCaseInsensitive, ngramDistanceUTF8, ngramDistanceCaseInsensitiveUTF8.

ngramsearch(Samanlık, iğne)

Aynı olarak ngramDistance ama arasındaki simetrik olmayan farkı hesaplar needle ve haystack the number of n-grams from needle minus the common number of n-grams normalized by the number of needle n-büyükanne. Daha yakın, daha needle is in the haystack. Bulanık dize arama için yararlı olabilir.

Büyük/küçük harf duyarsız arama veya / VE UTF-8 formatında kullanım işlevleri için ngramSearchCaseInsensitive, ngramSearchUTF8, ngramSearchCaseInsensitiveUTF8.

!!! note "Not" For UTF-8 case we use 3-gram distance. All these are not perfectly fair n-gram distances. We use 2-byte hashes to hash n-grams and then calculate the (non-)symmetric difference between these hash tables collisions may occur. With UTF-8 case-insensitive format we do not use fair tolower function we zero the 5-th bit (starting from zero) of each codepoint byte and first bit of zeroth byte if bytes more than one this works for Latin and mostly for all Cyrillic letters.

Orijinal makale