GQL ifadeleri, önkoşulları ve işlevleri

Bu makale, Microsoft Fabric sorgularında grafikte bulunan GQL ifadeleri, önkoşulları ve yerleşik işlevleri için kapsamlı bir başvuru sağlar. Graf sorgularınızda hesaplamaları gerçekleştirmeyi, sonuçları filtrelemeyi ve verileri dönüştürmeyi anlamak için bu başvuruyı kullanın.

GQL sorgu diline ve uçtan uca sorgu örneklerine genel bakış için bkz. GQL dil kılavuzu. Desteklenen veri türleri ve değişmez söz dizimi hakkında bilgi için bkz. GQL değerleri ve değer türleri.

Literals

Değişmez değerler, doğrudan belirtilen değeri değerlendiren basit ifadelerdir. GQL değerleri ve değer türleri makalesinde her değer türünün değişmez değerleri ayrıntılı olarak açıklanmaktadır.

Example:

1
1.0d
1.00m
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL

Her veri türü için ayrıntılı değişmez değer söz dizimi için bkz. GQL değerleri ve değer türleri.

Predicates

Koşul, GQL sorgularındaki sonuçları filtrelemek için sık kullandığınız boole ifadeleridir. , TRUEveya FALSE (null) olarak değerlendirilirUNKNOWN.

Dikkat

Koşulları filtre olarak kullandığınızda, bunlar yalnızca koşulun değerlendirildiği TRUEöğeleri korur.

Karşılaştırma önkoşulları

Değerleri karşılaştırmak için şu işleçleri kullanın:

  • = (eşittir)
  • <> (eşit değil)
  • <'dan küçük
  • > (>)
  • <= (küçük veya eşit)
  • >= (büyüktür veya eşittir)

GQL üç değerli mantık kullanır ve burada null dönüş UNKNOWNile karşılaştırmalar yapılır:

Expression Result
5 = 5 TRUE
5 = 3 FALSE
5 = NULL UNKNOWN
NULL = NULL UNKNOWN

Belirli bir karşılaştırma davranışı için GQL değerleri ve değer türlerindeki her değer türünün belgelerine bakın.

Example:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName

Eğer her iki operand da sayıysa, GQL onları sayısal değerleriyle karşılaştırır.

Important

Graph henüz GQL'nin tanımladığı tüm sayısal karşılaştırmaları desteklemiyor. Mevcut davranış şu kuralları kullanır:

  • Tam sayı ile yaklaşık sayı arasındaki karşılaştırma, tam sayı yaklaşık bir sayısal tipe dönüştürülür.
  • İşareli ve işaretsiz tam sayı değerleri karşılaştırması genellikle her iki değeri de işaretli tam sayı türüne dönüştürür. İmzalı tam sayı aralığı dışında işaretlenmemiş bir değer hata oluşturur.

Mantıksal ifadeler

Koşulları mantıksal işleçlerle birleştirin:

  • AND (her iki koşul da doğru)
  • OR (iki koşuldan biri true)
  • NOT (koşulu olumsuzlar)
  • XOR (özel ayrım — tam olarak bir işlenen doğru olduğunda true)

Example:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName

Özellik varlığı önkoşulları

Özelliklerin mevcut olup olmadığını denetlemek için şu koşulları kullanın:

p.locationIP IS NOT NULL
p.browserUsed IS NULL

Uyarı

Bilinen olmayan bir mülke erişmeye çalışmak sözdizimi hatasına yol açar. Potansiyel olarak var olmayan bir mülke erişim olarak değerlendirilir null. Bir özelliğin bilinip bilinmediğinin veya mevcut olmayabileceklerinin belirlenmesi, erişilen düğümün veya kenarın türüne bağlıdır.

Varoluş alt sorguları

İçiçe bir sorgu en az bir satır döndürüp vermediğini test etmek için prosedür formu EXISTS alt sorgu kullanın:

EXISTS {
  <query statements>
  RETURN <columns>
}

Sonuç olarak sıfır olmayan bir Boolean değeri ortaya çıkar:

  • TRUE eğer alt sorgu bir veya daha fazla satır dönerse.
  • FALSE eğer alt sorgu satır döndürmezse.

Zaten kapsamda olan değişkenler, alt sorgu içinde örtük olarak erişilebilirdir. Yalnızca alt sorgu içinde eklenen değişkenler dışarıda erişilebilir değildir.

Filtrede kullanım EXISTS :

MATCH (p:Person)
WHERE EXISTS {
  MATCH (p)-[:knows]->(friend:Person)
  RETURN friend
}
RETURN p.firstName, p.lastName

Alt sorgu satır döndürmediği satır tutmak için kullanılır NOT EXISTS . Ayrıca EXISTS , LETRETURN, ORDER BY, ve filtre veya kaynak ifadelerini birleştirebilirsiniz. EXISTS List predicate filtresi içinde desteklenmez.

Important

Sadece grafik desenine dayalı formlar ( EXISTS { (p)-[:knows]->(friend) } örneğin ve EXISTS ((p)-[:knows]->(friend)) desteklenmez). Önceki örneklerde gösterilen prosedür formunu kullanın. Skaler VALUE { ... } alt sorgular desteklenmiyor.

Dikkat

EXISTS alt sorgu bir satır döndürüp döndürmediğini test eder, toplam değerin sıfır olmayıp olmadığını değil. Gruplanmamış bir toplam, örneğin RETURN count(*) satır bulmasa bile bir satır MATCH döndürür, bu nedenle bu formu EXISTS 'yi değerlendirir.TRUE Eşleşmelerin var olup olmadığını test etmek istediğinizde eşleştirilmiş bir değişkeni döndürün.

Bağlantılı alt sorgular hakkında daha fazla bilgi için GQL dil rehberindeki ifadeyeCALL bakınız.

Üyelik koşullarını listeleme

Değerlerin listelerde olup olmadığını test edin:

p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']

List predicate fonksiyonları

Bir liste önlem fonksiyonu kullanarak bir listenin elemanları için bir Boolean ifadesini değerlendirin:

ALL(element IN list WHERE predicate)
ANY(element IN list WHERE predicate)
NONE(element IN list WHERE predicate)
SINGLE(element IN list WHERE predicate)

Kaynak, bir liste literal, liste değerli bir özellik, değişken veya değişken uzunluklu bir desenden bir grup listesi olabilir.

Fonksiyonların şu anlamları vardır:

Function Meaning
ALL Her eleman önlemi tatmin eder.
ANY En az bir eleman bu yüklemi tatmin eder.
NONE Hiçbir eleman bu yüklemi tatmin etmez.
SINGLE Tam olarak bir eleman bu yüklemi tatmin eder.

Aşağıdaki örnek, dinamik olarak oluşturulmuş bir liste üzerinde dört fonksiyonun tamamını değerlendirir:

LET items = [1, 2, 3]
RETURN ALL(x IN items WHERE x > 0) AS all_match,
       ANY(x IN items WHERE x = 2) AS any_match,
       NONE(x IN items WHERE x < 0) AS none_match,
       SINGLE(x IN items WHERE x = 2) AS single_match

Dört döndürülmüş değerin tamamı 'dir.TRUE

Ayrıca bir listedeki elemanların özelliklerini de değerlendirebilirsiniz. Bu örnekte, connections değişken uzunluklu kenar deseni tarafından oluşturulan grup listesi şöyledir:

MATCH (person:Person)-[connections:knows]->{1,4}(friend:Person)
WHERE ALL(connection IN connections WHERE connection.creationDate IS NOT NULL)
RETURN person.firstName, friend.firstName

Liste predikatları üç değerli mantık kullanır. Tablo, sonucu liste öğeleri için filtre ifadesi tarafından üretilen değerler açısından tanımlar:

Function TRUE FALSE UNKNOWN Boş liste
ALL Her filtre sonucu .TRUE En az bir sonuç .FALSE Hiçbir sonuç değildir FALSEve en az biri UNKNOWN. TRUE
ANY En az bir filtre sonucu .TRUE Hiçbir sonuç ya UNKNOWNda değildirTRUE. Hiçbir sonuç değildir TRUEve en az biri UNKNOWN. FALSE
NONE Hiçbir sonuç ya UNKNOWNda değildirTRUE. En az bir sonuç .TRUE Hiçbir sonuç değildir TRUEve en az biri UNKNOWN. TRUE
SINGLE Tam olarak bir sonuç TRUE, hiçbiri değildir UNKNOWN. Birden fazla sonuç TRUE, ya da hiçbir sonuç ya TRUE da UNKNOWNdeğildir. En fazla bir sonuç TRUE, en az biri UNKNOWNise . FALSE

Eğer kaynak listesi null ise, her fonksiyon döndürür UNKNOWN. Bir null liste elemanı, filtrenin null'a bağlı olduğu filtreyi değerlendirme sonucuna katkıda bulunur; bu fonksiyon sonucunu otomatik olarak bilinmez.

Eleman değişkeni yalnızca liste önleminin filtre ifadesi içinde mevcuttur. Filtre ayrıca çevreleyen sorgudan gelen değişkenlere referans verebilir. Eleman değişkeni dış değişkenle aynı isme sahipse, yerel eleman değişkeni önceliklidir. İç içe liste önlemleri de benzer şekilde dış eleman değişkenini gölgeleyebilir.

Toplu fonksiyonlar, çevreleyen bir grup listesine referans verebilir, ancak yerel olarak bağlı eleman değişkenini toplayamıyorlar. EXISTS Alt sorgular ayrıca bir liste predicate filtresi içinde desteklenmez.

ANY(...) bir liste predikatı fonksiyonudur. Bunu yol arama öneki veya ANY dinamik değer tipiyle karıştırmayınANY SHORTEST.

Dize deseni önkoşulları

Desen eşleştirme tekniklerini kullanarak dizeleri eşleştirin:

p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'

RE2 düzenli ifade eşleştirmesi MSFT.REGEXP_LIKEiçin .

Aritmetik ifadeler

Sayısal değerlerle standart aritmetik işleçler kullanın:

  • + (toplama)
  • - (çıkarma)
  • * (çarpma)
  • / (bölme)

Aritmetik işleçler genel matematiksel kuralları izler.

Öncelik:

Genellikle, işleçler önceden *olduğu gibi + yerleşik işleç öncelik kurallarını izler. Değerlendirme sırasını gerektiği gibi denetlemek için parantezleri kullanın.

Example:

(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'

Zorlama kuralları:

Öncelik sırasına göre aşağıdaki kuralları kullanın:

  1. Yaklaşık sayısal tip içeren aritmetik ifadeler ise yaklaşık sayısal bir tip döndürür.
  2. Hem imzalı hem de işaretsiz tamsayı türlerini içeren aritmetik ifadeler, işaretli tamsayı tipi döndürür.

Özellik erişimi

Nokta gösterimini kullanarak özelliklere erişin:

p.firstName
edge.creationDate

Liste erişimi

Sıfır tabanlı dizin oluşturma kullanarak liste öğelerine erişin:

interests[0]    -- first element
interests[1]    -- second element

Yerleşik işlevler

GQL, veri işleme ve analiz için çeşitli yerleşik işlevleri destekler.

Sayısal işlevler

Sayısal değerleri dönüştürmek, trigonometrik değerleri hesaplamak ve tam sayı aralıkları oluşturmak için sayısal fonksiyonlar kullanın.

Mutlak değer ve güç

Function Description
ABS(value) Mutlak değeri döndürür. Sonuç aynı sayısal tipe sahiptir value.
POWER(base, exponent) Yükselir baseexponent ve geri getirir.DOUBLE

Her iki fonksiyon da sayısal değerleri kabul eder. Null argümanı null üretir. Geçersiz bir sayısal işlem, örneğin taşan POWER bir sonuç, hata oluşturur.

RETURN ABS(-1) AS absoluteValue, POWER(2, -2) AS reciprocalSquare

Sonuç:

absoluteValue karşılıklıKare
1 0.25

Trigonometrik işlevler

Trigonometrik fonksiyonlar bir sayısal değeri kabul eder ve bir DOUBLE'a döndürür. Null argümanı null üretir.

Function Description
SIN(value), COS(value), TAN(value), COT(value) Trigonometrik bir fonksiyon hesaplayın. value radyen cinsinden bir açıdır.
ASIN(value), ACOS(value), ATAN(value) Ters trigonometrik bir fonksiyon hesaplayın. Sonuç radyanlarda. ASINve ACOS 'den bir 1değer gerektirir-1.
SINH(value), COSH(value), TANH(value) Hiperbolik bir fonksiyon hesaplayın.
DEGREES(value) Bir açıyı radyandan dereceye dönüştürür.
RADIANS(value) Bir açıyı dereceden radyana dönüştürür.

Bir fonksiyonun matematiksel alanı dışındaki bir argüman hata üretir.

RETURN COS(0) AS cosine, RADIANS(180) AS angle

Sonuç:

kosinüs açı
1.0 3.141592653589793238462643383279502884

Tam sayı aralıkları

RANGE(start, end)Bir adım kullanarak 1tam sayılar listesini döndürür.startend RANGE(start, end, step) belirtilen sıfır olmayan adımı kullanır. start, end, ve step sıfır olmayan tam sayılar olmalıdır. Sıfır veya startendiçin geçerlidir; sadece step sıfır olmayan olmalıdır.

Aralık şunları içerir start. Sadece tekrar tam olarak erişim end eklerinde step dahil olurend. Büyük olan pozitif start adım veya daha az endolan negatif start adım boş bir liste döndürür.end Sıfır adım hata üretir.

RETURN RANGE(0, 10, 3) AS ascending, RANGE(5, 0, -2) AS descending

Sonuç:

yükselen azalan
[0, 3, 6, 9] [5, 3, 1]

Eğer tüm argümanlar işaretsiz tam sayılarsa, RANGE bir LIST<UINT64>. Aksi takdirde, a LIST<INT64> döndürür ve güvenli şekilde imzalı tam sayı olarak temsil edilemeyen değerleri reddeder.

Toplama işlevleri

Toplu fonksiyonlar, değerleri giriş satırları arasında veya değişken uzunluklu bir desenle sınırlanmış bir grup listesi içinde birleştirir.

Function Description
COUNT(*) Giriş satırlarını sayar, sıfır değerler içeren satırlar da dahil.
COUNT(expression) Sıfır olmayan sonuçları sayar expression.
SUM(expression) Sıfır olmayan sayısal değerlerin toplamını döndürür.
AVG(expression) Sıfır olmayan sayısal değerlerin ortalamasını döndürür.
MIN(expression) Minimum sıfır olmayan değeri döndürür.
MAX(expression) Maksimum sıfır olmayan değeri döndürür.
COLLECT_LIST(expression) Her girdi için bir eleman içeren bir liste döner, null öğeler dahil.
COLLECT_ONE(expression) Bir sıfır olmayan giriş değeri döndürür. Seçilen değer deterministik değildir.
COLLECT_ELEMENTS(expression) Liste değerli girdilerin elemanlarını tek bir listeye birleştirir. Null giriş listeleri eleman eklemez, ancak bir liste içindeki null elemanlar sonuçta kalır.

Bir toplu sorguda gruplama sütunları yoksa ve giriş satır almıyorsa, COUNT , COLLECT_LIST döndürür 0ve COLLECT_ELEMENTS boş bir liste döndürür, diğer aggregate fonksiyonlar ise null döndürür. Bir koleksiyon toplamının döndürülen değer sırasına güvenmeyin. Sütunları gruplarken, hiçbir giriş satırı grup oluşturmaz ve dolayısıyla sonuç satırı olmaz.

Küme niceleyicileri

Tekrarlayan değerleri eklemek veya DISTINCT kaldırmak için kullanılırALL. ALL ifade agregaları için varsayılan olarak kullanılır. COUNT(*) belirli bir niceleyiciyi kabul etmez.

MATCH (person:Person)
RETURN COUNT(person) AS personCount,
       COUNT(DISTINCT person.browserUsed) AS browserCount

için COLLECT_LIST, DISTINCT çoğaltılmış değerleri kaldırır ve en fazla bir null tutar. İçinde COLLECT_ELEMENTS, DISTINCT giriş listeleri birleştirildikten sonra elemanlar için geçerlidir. DISTINCT deterministik yapmaz COLLECT_ONE .

Agregata özgü filtreler ve sınırlar

Bir agrega doğru olan değerleri predicate dahil etmek için bir agrega ekleyinFILTER (WHERE predicate). Yanlış ve bilinmeyen önlem sonuçları hariç tutulur. Bu filtre yalnızca o agregatı etkiler, aynı RETURNiçindeki diğer ifadelere erişilebilen giriş satırlarını değil.

En fazla n nitelikli giriş satırlarını dikkate almak için toplam filtrenin içine ekleyinLIMIT n. Filtreleme toplam-spesifik sınırdan önce yapılır ve DISTINCT limitten sonra uygulanır.

MATCH (person:Person)
RETURN COUNT(*) AS allPeople,
       COUNT(*) FILTER (WHERE person.birthday < 19900101 LIMIT 5) AS sampleBornBefore1990

Satırlar arasında toplama

Bir agrega genellikle değerleri giriş satırları boyunca dikey olarak birleştirir. Her grup için bir sonuç hesaplamak için kullanın GROUP BY .

MATCH (p:Person)
RETURN count(*) AS total_people, avg(p.birthday) AS average_birth_year
MATCH (p:Person)-[:isLocatedIn]->(c:City)
RETURN c.id AS cityId, c.name, count(*) AS population, avg(p.birthday) AS average_birth_year
GROUP BY cityId, c.name

Bir dikey agregayı aynı sorgu bloğunda diğerinin içine doğrudan yerleştirmeyin. Örneğin, SUM(COUNT(*)) geçersizdir. Toplu sonucu toplamanız gerektiğinde toplama adımlarını ayırmak için kullanın NEXT .

Eşleştirilmiş bir yol içinde toplama

Değişken uzunluklu bir desenle sınırlanan bir kenar değişkeni, bir grup listesi olur. Bu değişken üzerindeki bir toplam yataydır: her eşleşen yol için listede bir sonuç hesaplar, farklı giriş satırlarını birleştirmek yerine.

MATCH (person:Person)-[knows:knows]->{1,5}(friend:Person)
RETURN COUNT(knows) AS pathLength

Burada, COUNT(knows) eşleşen her yoldaki kenar sayısını döndürür. , SUM, AVG, MIN, COLLECT_ONEMAXCOLLECT_LISTve COLLECT_ELEMENTS yatay formları COUNTdesteklenir. COUNT(*) ve agrega özgü FILTER ya da LIMIT yatay formlar değildir.

Yatay, bir dış dikey agrega girdi olabilir:

MATCH (person:Person)-[knows:knows]->{1,5}(friend:Person)
RETURN MIN(COUNT(knows)) AS shortestMatchedPath

Bu sorguda, COUNT(knows) eşleştirilen yol için bir uzunluk hesaplanır ve MIN bu uzunlukları giriş satırları arasında birleştirir.

Görev odaklı örnekler için bkz. Grafik verilerini filtrele ve topla.

Koşullu ifadeler

Basit CASE bir ifade kullanarak bir ifadeyi bir veya daha fazla değerle karşılaştırın ve ilk eşit değerle ilişkili sonucu döndürün:

CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  ELSE default_result
END

NULLIF:

NULLIF(a, b)eşitse NULLadöndürürb, aksi takdirde döndürüra.

Example:

MATCH (p:Person)
RETURN p.firstName,
       CASE p.gender
         WHEN 'male' THEN 'M'
         WHEN 'female' THEN 'F'
         ELSE 'Other'
       END AS gender_code,
       NULLIF(p.browserUsed, 'Unknown') AS browser

Aranan CASE WHEN <predicate> ifadeler desteklenmiyor. Satır dalı yönlendirmek ve seçilen dal için bir sorgu ifadesi veya iç içe işlem çalıştırmak için koşullu bir ifade kullanınWHEN.

Dize işlevleri

Karakter dizelerini ölçmek, dönüştürmek, aramak, karşılaştırmak ve birleştirmek için dize fonksiyonlarını kullanın.

Karakter uzunluğu ve durum

Bu fonksiyonları karakter dizilerini ölçmek veya değiştirmek için kullanın:

Function Description
CHAR_LENGTH(string) Karakter sayısını döndürür.
UPPER(string) Unicode büyük harf eşlemesini uygular.
LOWER(string) Unicode küçük harf eşlemesi uygulanır.
CASEFOLD(string) Küçük-küçük küçük harfsiz eşleştirme için yerel bağımsız Unicode kılıf katlamayı uygular.

Unicode eşlemeleri, bir dizinin uzunluğunu veya temsilini değiştirebilir:

RETURN UPPER('straße') AS uppercase,
       LOWER('İ') AS lowercase,
       CASEFOLD('Straße') AS folded

Sonuçlar sırasıyla , i̇, ve strasse, şeklindedirSTRASSE. CASEFOLD LOWERile eşdeğer değildir. Örneğin, durum katlama ß ile ss Yunan sigma formlarını Σ, σ, ve ς ile σeşler.

Dizeleri normalize et

GQL, dört Unicode normalizasyon formu tanımlar:

  • Normalizasyon Formu C (NFC), kanonik bileşim.
  • Normalizasyon Formu D (NFD), kanonik ayrıştırma.
  • Normalizasyon Formu KC (NFKC), uyumluluk bileşimi.
  • Normalizasyon Formu KD (NFKD), uyumluluk ayrıştırması.

NORMALIZE(string) varsayılan olarak NFC'ye geçer. İkinci argüman olarak bir normalizasyon formu belirtin:

RETURN NORMALIZE('cafe\u0301') AS composed,
       NORMALIZE('café', NFD) AS decomposed

Argüman bir iplik olmalı.

Important

Graph şu anda NFC ve NFD'yi destekliyor. NFKC veya NFKD belirtmek hata oluşturur.

Kesim telleri

Bir dizinin her iki ucundan, başlangıcından veya sonundan boşluk karakterlerini veya belirli bir karakteri çıkarmak için kullanılır TRIM :

RETURN TRIM('  text  ') AS both_ends,
       TRIM(BOTH FROM '  text  ') AS explicit_both,
       TRIM(LEADING FROM '  text  ') AS beginning,
       TRIM(TRAILING FROM '  text  ') AS ending,
       TRIM(LEADING 'f' FROM 'foobar') AS custom_character

Özel trim değeri tam olarak bir bayt olmalıdır. Çok baytlı Unicode karakterleri ve birden fazla karakter içeren dizeler özel kesme değerleri olarak desteklenmez. Bir null kaynak veya özel kesim değeri null döndürür.

Stringleri birleştirme

STRING_JOIN(list [, delimiter]) bir dizi tellere katılır. Varsayılan ayırıcı, ardından bir boşluk gelen virgüldür:

RETURN STRING_JOIN(['foo', 'bar', 'baz']) AS default_delimiter,
       STRING_JOIN(['foo', 'bar', 'baz'], '-') AS custom_delimiter

Sonuçlar foo, bar, baz ve foo-bar-baz. Boş bir liste boş bir dizi döndürür. Bir null liste, null sınırlayıcı veya null list öğesi null döndürür. Her null olmayan liste elemanı bir dizi olmalıdır.

Normal ifade işlevleri

Graph, bu düzenli ifade fonksiyonlarını GQL'ye uzantı olarak sağlar:

Function Use
MSFT.REGEXP_LIKE Metnin eşleşme olup olmadığını test edin.
MSFT.REGEXP_COUNT Kibritleri say.
MSFT.REGEXP_INSTR Bir eşleşme veya yakalama grubunun konumunu bul.
MSFT.REGEXP_SUBSTR Bir eşleşme veya capture grubunun metnini geri döndür.
MSFT.REGEXP_REPLACE Eşleşen metni değiştir.
MSFT.REGEXP_LIKE

Kalıp kaynak dizinin herhangi bir kısmıyla eşleştiğinde geri döner TRUE . Eşleşme bulunmazsa FALSE döndürür.

Argümanlar Syntax
2 MSFT.REGEXP_LIKE(source, pattern)
3 MSFT.REGEXP_LIKE(source, pattern, flags)

source arama dizisi. patternifadenin kendisi veya gibi çapalar ^$kullanmadıkça herhangi bir alt diziyle source eşleştirilir. flags Eşleşme kuralları ve seçeneklerinde tanımlandığı şekilde eşleşme davranışını değiştirir.

RETURN MSFT.REGEXP_LIKE('HELLO', 'hello', 'i') AS matches

Sonuç TRUE'dır.

MSFT.REGEXP_COUNT

Eşleşme sayısını döndürür. Eşleşme bulunmazsa 0 döndürür.

Argümanlar Syntax
2 MSFT.REGEXP_COUNT(source, pattern)
3 MSFT.REGEXP_COUNT(source, pattern, start)
4 MSFT.REGEXP_COUNT(source, pattern, start, flags)

source arama dizisi ve pattern sayılması gereken eşleşmeleri belirler. start eşleştirmenin başlayabileceği sıfır tabanlı Unicode kod noktası konumudur. Bir maç bu pozisyonda veya sonrasında başlamalıdır. Bu pozisyon, sabitlenmiş desenler için telin yeni bir başlangıcı olmuyor. flags Eşleşme kuralları ve seçeneklerinde tanımlandığı şekilde eşleşme davranışını değiştirir.

RETURN MSFT.REGEXP_COUNT('1a2a3a4', '[0-9]', 3) AS match_count

Arama pozisyon , ikinci konumdan başlar3, yani sadece rakamlar 3 ve 4 sayılır.a Sonuç 2'dır.

MSFT.REGEXP_INSTR

Seçilen bir eşleşme veya yakalama grubunun sıfır tabanlı konumunu döndürür.

Argümanlar Syntax
2 MSFT.REGEXP_INSTR(source, pattern)
3 MSFT.REGEXP_INSTR(source, pattern, start)
4 MSFT.REGEXP_INSTR(source, pattern, start, occurrence)
5 MSFT.REGEXP_INSTR(source, pattern, start, occurrence, return_option)
6 MSFT.REGEXP_INSTR(source, pattern, start, occurrence, return_option, flags)
7 MSFT.REGEXP_INSTR(source, pattern, start, occurrence, return_option, flags, group)

source arama dizisi ve pattern eşleşmeleri tanımlar. start eşleştirmenin başlayabileceği sıfır tabanlı Unicode kod noktası konumudur. Bir eşleşme, bu pozisyonda veya sonrasında başlamalıdır; bu da sabitlenmiş desenler için ipin yeni başlangıcına dönüşmez.

occurrence Bulunduğundan startilk, ikinci veya sonraki örtüşmeyen eşleşmeyi seçer. group O eşleşme içinde ne bulunacağını seçer: 0 tam eşleşmeyi seçer ve pozitif değer numaralı yakalama grubunu seçer. return_option seçilen maçın veya grubun hangi sınırının geri döneceğini belirler: 0 başlangıç pozisyonunu döndürür ve 1 bitişinden hemen sonra konumu geri getirir. flags Eşleşme kuralları ve seçeneklerinde tanımlandığı şekilde eşleşme davranışını değiştirir.

Eğer eşleşen bir oluşum bulunmazsa veya seçilen yakalama grubu bu gerçekleşmeye katılmazsa, fonksiyon -1döner.

RETURN MSFT.REGEXP_INSTR('banana', 'a', 0, 2) AS match_position

İkinci maç pozisyonda 3başlar, yani sonuç .3

MSFT.REGEXP_SUBSTR

Seçilen bir eşleşme veya capture grubunun metnini döndürür.

Argümanlar Syntax
2 MSFT.REGEXP_SUBSTR(source, pattern)
3 MSFT.REGEXP_SUBSTR(source, pattern, start)
4 MSFT.REGEXP_SUBSTR(source, pattern, start, occurrence)
5 MSFT.REGEXP_SUBSTR(source, pattern, start, occurrence, flags)
6 MSFT.REGEXP_SUBSTR(source, pattern, start, occurrence, flags, group)

source arama dizisi ve pattern eşleşmeleri tanımlar. start eşleştirmenin başlayabileceği sıfır tabanlı Unicode kod noktası konumudur. Bir eşleşme, bu pozisyonda veya sonrasında başlamalıdır; bu da sabitlenmiş desenler için ipin yeni başlangıcına dönüşmez.

occurrence Bulunduğundan startilk, ikinci veya sonraki örtüşmeyen eşleşmeyi seçer. group O eşleşmeden dönecek metni seçer: 0 tam eşleşmeyi seçer ve pozitif bir değer numaralı yakalama grubunu seçer. flags Eşleşme kuralları ve seçeneklerinde tanımlandığı şekilde eşleşme davranışını değiştirir.

Eğer eşleşen bir oluşum bulunmazsa veya seçilen yakalama grubu bu meydana katılmazsa, fonksiyon null döner.

RETURN MSFT.REGEXP_SUBSTR(
  '12-345',
  '([0-9]+)-([0-9]+)',
  0,
  1,
  '',
  2
) AS matched_text

İlk oluşum tam dizidir ve yakalama grubu 2345, böylece sonuç .345

MSFT.REGEXP_REPLACE

Eşleşen metnin yerini alıyor. Varsayılan olarak, her eşleşmeyi değiştirir ve yerine metin kelimesi kelimesine ekler.

Argümanlar Syntax
3 MSFT.REGEXP_REPLACE(source, pattern, [EXACT \| TEMPLATE] replacement)
4 MSFT.REGEXP_REPLACE(source, pattern, [EXACT \| TEMPLATE] replacement, start)
5 MSFT.REGEXP_REPLACE(source, pattern, [EXACT \| TEMPLATE] replacement, start, occurrence)
6 MSFT.REGEXP_REPLACE(source, pattern, [EXACT \| TEMPLATE] replacement, start, occurrence, flags)

source değiştirilecek dizidir ve pattern eşleşmeleri belirler. replacement seçilmiş bir eşleşme için eklenen metindir. EXACT kelime anlamıyla ekler; TEMPLATE yakalama referanslarını yorumlar.

start Sıfır tabanlı Unicode kod noktası konumudur ve burada yenileme başlayabilir. Bir maç bu pozisyonda veya sonrasında başlamalıdır. Önceki start metin değişmeden korunur ve konum, sabitlenmiş desenler için telin yeni bir başlangıcı olmur. Her eşleşmeyi yerine koymak için , startya da sadece numaralandırılmış, örtüşmeyen eşleşmeyi değiştirmek için pozitif bir değere ayarlanır occurrence0. Belirli bir olay seçildiğinde önceki maçlar start değişmeden kalır. flags Eşleşme kuralları ve seçeneklerinde tanımlandığı şekilde eşleşme davranışını değiştirir.

RETURN MSFT.REGEXP_REPLACE('a1b2c3', '[0-9]', '#', 0, 2) AS replaced

Sadece ikinci basamak eşleşmesi değiştirilir, böylece sonuç .a1b#c3

Eşleşme bulunmazsa, kaynak dizisi değişmeden geri döner.

Eşleşen metni yeniden TEMPLATEkullanmak için . Bu modda, \0\9 tam eşleşme ve yakalama gruplarına atıfta bulunur ve \\ kelimenin tam anlamıyla bir ters eğik çizgi ekler. Bu referansları ek kaçış olmadan geçirmek için ham bir dize literal, ön eki @ile , kullanın:

RETURN MSFT.REGEXP_REPLACE(
  'John Smith',
  @'([A-Za-z]+) ([A-Za-z]+)',
  TEMPLATE @'\2 \1'
) AS reordered_name

Sonuç Smith John'dır.

Eşleşme kuralları ve seçenekleri

Desenler, RE2 düzenli ifade sözdizimi kullanır ve Unicode dizeleriyle eşleşir. Kaynak herhangi bir dizim ifadesi olabilir. Desen, bayraklar ve yerine koyma dize literalleri olmalı, sayısal seçenekler ise işaretsiz tam sayı literalleri olmalıdır.

Eşleşmeler soldan sağa çakışmadan bulunur. Sıfır uzunlukta eşleşmeden sonra, eşleşme bir Unicode kod noktası ilerler.

Başlangıç pozisyonları ve geri dönen pozisyonlar sıfır tabanlı Unicode kod noktası ofsetleridir. Varlık sayıları tek tabanlıdır, ancak bu durum 0 her karşılaşmayı yerine koymak MSFT.REGEXP_REPLACEanlamına gelir.

Aşağıdaki tablo, atlanmış isteğe bağlı argümanlar için varsayılan değerleri listeler:

Function Defaults
MSFT.REGEXP_LIKE Bayraklar boş.
MSFT.REGEXP_COUNT Başlangıç ; 0bayraklar boş.
MSFT.REGEXP_INSTR Başlangıç; 0gerçekleşme ; 1dönüş seçeneği 0; bayraklar boş; grup 0.
MSFT.REGEXP_SUBSTR Başlangıç; 0gerçekleşme ; 1bayraklar boş; grup 0.
MSFT.REGEXP_REPLACE Mod EXACT; başlangıç 0; gerçekleşme 0; bayraklar boş.

Isteğe bağlı bayraklar şunlardır:

Flag Davranış
i Vaka bağımsız olarak eşleştir.
m Her satırın başını ve sonunu yapın ^ ve $ eşleştirin.
s Yeni karakterleri eşleştir . .

Bayrakları tek bir dizide birleştirin, örneğin 'ims'. Bir null kaynak null döndürür. Desteklenmeyen bir bayrak, geçersiz düzenli ifade, geçersiz dönüş seçeneği veya geçersiz oluşum veya grup numarası hata döndürür.

Graf işlevleri

  • nodes(path) - bir yol değerinden düğümler döndürür.
  • edges(path) - yol değerinden kenarları döndürür.
  • elements(path) - bir yoldaki tüm düğümleri ve kenarları yol sırasına göre tek bir liste olarak döndürür.
  • labels(node_or_edge) - bir düğümün veya kenarın etiketlerini dize listesi olarak döndürür.
  • path_length(path) - bir yoldaki kenar sayısını döndürür.
  • element_id(node_or_edge) - düğüm veya kenar tanımlayıcısını opak bir dizi olarak döndürür.

ELEMENT_ID bir düğüm veya kenar referansını kabul eder ve null girdi için null döndürür. Geri dönen ipi opak olarak kabul edin.

Example:

MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues, path_length(p) AS hops

Liste işlevleri

  • size(list) - liste değerinin boyutunu döndürür.
  • trim(list,n) - Bir listeyi en fazla n eleman olarak kısaltır.

Example:

MATCH (p:Person)-[:hasInterest]->(t:Tag)
LET personId = p.id, personName = p.firstName
RETURN personId, personName, collect_list(t.name) AS interests
GROUP BY personId, personName
FILTER size(interests) > 3

Zamana bağlı işlevler

  • CURRENT_TIMESTAMP - geçerli bölgeli tarih saat değerini döndürür.
  • ZONED_DATETIME(string) - ISO 8601 dizisiyle temsil edilen bölgeli tarih saatini döndürür.
  • DURATION(string) - ISO 8601 süreli diziyle temsil edilen gündüz süresini döndürür.

Example:

RETURN CURRENT_TIMESTAMP AS now,
       DURATION('PT2H') AS twoHours

İki bölgeli tarih saati arasında bir süre çıkarmak için çıkarma operatörünü kullanın:

RETURN ZONED_DATETIME('2026-09-17T12:00:00Z')
       - ZONED_DATETIME('2026-09-17T10:00:00Z') AS elapsed

Important

Grafik, gündüz sürelerini destekler, ancak yıl-ay sürelerini desteklemez. DURATION_BETWEEN(start, end) şu anda desteklenmiyor; bunun yerine iki bölgeli tarih saati değerini çıkarın.

Genel işlevler

  • coalesce(value1, value2, ...) - ilk null olmayan değeri döndürür.
  • to_json_string(value) - Bir değeri JSON dize gösterimine dönüştürür.

Example:

MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name,
       to_json_string(p) AS person_json