Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Denne artikkelen inneholder en omfattende referanse for GQL-uttrykk, predikater og innebygde funksjoner som er tilgjengelige i grafen i Microsoft Fabric-spørringer. Bruk denne referansen til å forstå hvordan du utfører beregninger, filtrerer resultater og transformerer data i grafspørringene.
Hvis du vil ha en oversikt over GQL-spørringsspråket og eksempler på ende-til-ende-spørring, kan du se GQL-språkveiledning. Hvis du vil ha informasjon om støttede datatyper og litteralsyntaks, kan du se GQL-verdier og verdityper.
Litteraler
Litteraler er enkle uttrykk som direkte evalueres til den angitte verdien. Artikkelen om GQL-verdier og verdityper forklarer litteraler av hver type verdi i detalj.
Eksempel:
1
1.0d
1.00m
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL
Hvis du vil ha detaljert litteralsyntaks for hver datatype, kan du se GQL-verdier og verdityper.
Predikater
Predikater er boolske uttrykk som du vanligvis bruker til å filtrere resultater i GQL-spørringer. De evalueres til TRUE, FALSEeller UNKNOWN (null).
Forsiktig!
Når du bruker predikater som filter, beholder de bare de elementene som predikatet evaluerer til TRUE.
Sammenligningspredikater
Bruk disse operatorene til å sammenligne verdier:
-
=(lik) -
<>(ikke lik) -
<(mindre enn) -
>(større enn) -
<=(mindre enn eller lik) -
>=(større enn eller lik)
GQL bruker treverdilogikk der sammenligninger med nullretur UNKNOWN:
| Uttrykk | Resultat |
|---|---|
5 = 5 |
TRUE |
5 = 3 |
FALSE |
5 = NULL |
UNKNOWN |
NULL = NULL |
UNKNOWN |
Hvis du vil ha spesifikk sammenligningsvirkemåte, kan du se dokumentasjonen for hver verditype i GQL-verdier og verdityper.
Eksempel:
MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName
Hvis begge operandene er tall, sammenligner GQL dem med deres numeriske verdier.
Important
Graph støtter ennå ikke alle numeriske sammenligninger som GQL definerer. Nåværende atferd bruker disse reglene:
- En sammenligning mellom et heltall og et tilnærmet tall konverterer heltallet til en tilnærmet numerisk type.
- En sammenligning mellom signerte og usignerte heltallsverdier konverterer vanligvis begge verdiene til en signert heltallstype. En usignert verdi utenfor det signerte heltallsområdet forårsaker en feil.
Logiske uttrykk
Kombinere betingelser med logiske operatorer:
-
AND(begge betingelsene er sanne) -
OR(begge betingelsene er sanne) -
NOT(opphever betingelse) -
XOR(eksklusiv disjunction – sann når nøyaktig én operand er sann)
Eksempel:
MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName
Predikater for egenskapseksistens
Hvis du vil kontrollere om det finnes egenskaper, bruker du disse predikatene:
p.locationIP IS NOT NULL
p.browserUsed IS NULL
Note
Forsøk på å få tilgang til en kjent ikke-eksisterende egenskap resulterer i en syntaksfeil.
Tilgang til en potensielt ikke-eksisterende eiendom vurderer til null.
Fastsettelsen av om en egenskap er kjent eller potensielt ikke-eksisterende, er basert på typen node eller kant som er tilgjengelig.
Eksistens-underspørringer
Bruk en prosedyreform-underspørring EXISTS for å teste om en nestelt spørring returnerer minst én rad:
EXISTS {
<query statements>
RETURN <columns>
}
Resultatet er en ikke-null boolsk verdi:
-
TRUEhvis underspørringen returnerer én eller flere rader. -
FALSEhvis underspørringen ikke returnerer noen rader.
Variabler som allerede er innenfor omfanget er implisitt tilgjengelige inne i delspørringen. Variabler som kun introduseres i underspørringen er ikke tilgjengelige utenfor den.
Bruk EXISTS i et filter:
MATCH (p:Person)
WHERE EXISTS {
MATCH (p)-[:knows]->(friend:Person)
RETURN friend
}
RETURN p.firstName, p.lastName
Bruk NOT EXISTS for å beholde rader hvor underspørringen ikke returnerer noen rader. Du kan også bruke EXISTS i LET, RETURN, , ORDER BYog aggregere filter- eller kildeuttrykk.
EXISTS støttes ikke i et listepredikatfilter.
Important
Grafmønstre-only former som EXISTS { (p)-[:knows]->(friend) } og EXISTS ((p)-[:knows]->(friend)) støttes ikke. Bruk prosedyreskjemaet vist i de foregående eksemplene. Skalar-underforespørsler VALUE { ... } støttes ikke.
Forsiktig!
EXISTS tester om delspørringen returnerer en rad, ikke om en aggregert verdi er ikke-null. Et ugruppert aggregat som RETURN count(*) returnerer én rad selv når MATCH det ikke finnes noen rader, så den formen av EXISTS evalueres til TRUE. Returner en matchet variabel når du vil teste om matcher finnes.
For mer informasjon om korrelerte underforespørsler, se CALL uttalelsen i GQL-språkguiden.
Predikater for listemedlemskap
Test om verdiene er i lister:
p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']
List predikatfunksjoner
Bruk en listepredikatfunksjon for å evaluere et boolsk uttrykk for elementene i en liste:
ALL(element IN list WHERE predicate)
ANY(element IN list WHERE predicate)
NONE(element IN list WHERE predicate)
SINGLE(element IN list WHERE predicate)
Kilden kan være et listeliteral, en listeverdi-egenskap, en variabel eller en gruppeliste fra et variabelt lengdemønster.
Funksjonene har følgende betydninger:
| Function | Betydning |
|---|---|
ALL |
Hvert element tilfredsstiller predikatet. |
ANY |
Minst ett element tilfredsstiller predikatet. |
NONE |
Ingen element tilfredsstiller predikatet. |
SINGLE |
Nøyaktig ett element tilfredsstiller predikatet. |
Følgende eksempel evaluerer alle fire funksjonene over en dynamisk konstruert liste:
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
Alle de fire returnerte verdiene er TRUE.
Du kan også evaluere egenskaper til elementer fra en liste. I dette eksempelet connections er gruppelisten laget av kantmønsteret med variabel lengde:
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
Listepredikater bruker treverdilogikk. Tabellen beskriver resultatet i form av verdiene som produseres av filteruttrykket for listeelementene:
| Function | TRUE |
FALSE |
UNKNOWN |
Tom liste |
|---|---|---|---|---|
ALL |
Hvert filterresultat er TRUE. |
Minst ett resultat er FALSE. |
Ingen resultat er FALSE, og minst ett er UNKNOWN. |
TRUE |
ANY |
Minst ett filterresultat er TRUE. |
Ingen resultat er TRUE eller UNKNOWN. |
Ingen resultat er TRUE, og minst ett er UNKNOWN. |
FALSE |
NONE |
Ingen resultat er TRUE eller UNKNOWN. |
Minst ett resultat er TRUE. |
Ingen resultat er TRUE, og minst ett er UNKNOWN. |
TRUE |
SINGLE |
Nøyaktig ett resultat er TRUE, og ingen er UNKNOWN. |
Mer enn ett resultat er TRUE, eller ingen resultat er TRUE eller UNKNOWN. |
Maksimalt ett resultat er TRUE, og minst ett er UNKNOWN. |
FALSE |
Hvis kildelisten er null, returnerer UNKNOWNhver funksjon . Et nullliste-element bidrar med resultatet av å evaluere filteret med det elementet bundet til null; det gjør ikke automatisk funksjonsresultatet ukjent.
Elementvariabelen er kun tilgjengelig innenfor listepredikatets filteruttrykk. Filteret kan også referere til variabler fra den omsluttende spørringen. Hvis elementvariabelen har samme navn som en ytre variabel, har den lokale elementvariabelen forrang. Nestede listepredikater kan på lignende måte skyggelegge en ytre elementvariabel.
Aggregerte funksjoner kan referere til en omsluttende gruppeliste, men de kan ikke aggregere den lokalt bundne elementvariabelen.
EXISTS Underforespørsler støttes heller ikke i et listepredikatfilter.
ANY(...) er en listepredikatfunksjon. Ikke forveksle det med ANY SHORTEST sti-søk-prefikset eller ANY dynamisk verditype.
Strengmønsterpredikater
Sammenligne strenger ved hjelp av teknikker for mønstersamsvar:
p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'
For RE2 regulær uttrykksmatching, bruk MSFT.REGEXP_LIKE.
Aritmetiske uttrykk
Bruk standard aritmetiske operatorer med numeriske verdier:
-
+(tillegg) -
-(subtraksjon) -
*(multiplikasjon) -
/(divisjon)
Aritmetiske operatorer følger generelle matematiske konvensjoner.
Forrang:
Operatorer følger vanligvis etablerte regler for operatorprioritet, for eksempel * før +. Bruk parenteser til å kontrollere evalueringsrekkefølgen etter behov.
Eksempel:
(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'
Tvangsregler:
Bruk følgende regler i rekkefølgen av prioritet:
- Aritmetiske uttrykk som involverer en tilnærmet numerisk type gir en tilnærmet numerisk type.
- Aritmetiske uttrykk som involverer både signerte og usignerte heltallstyper returnerer en signert heltallstype.
Egenskapstilgang
Access-egenskaper ved hjelp av punkt notasjon:
p.firstName
edge.creationDate
Listetilgang
Tilgangslisteelementer ved hjelp av nullbasert indeksering:
interests[0] -- first element
interests[1] -- second element
Innebygde funksjoner
GQL støtter ulike innebygde funksjoner for databehandling og analyse.
Numeriske funksjoner
Bruk numeriske funksjoner for å transformere numeriske verdier, beregne trigonometriske verdier og lage heltallsintervaller.
Absolutt verdi og makt
| Function | Description |
|---|---|
ABS(value) |
Returnerer absoluttverdien. Resultatet har samme numeriske type som value. |
POWER(base, exponent) |
Øker base til exponent og returnerer en DOUBLE. |
Begge funksjonene aksepterer numeriske verdier. Et nullargument gir null. En ugyldig numerisk operasjon, som et overflytende POWER resultat, gir en feil.
RETURN ABS(-1) AS absoluteValue, POWER(2, -2) AS reciprocalSquare
Resultatet er:
| absoluttVerdi | reciprocalSquare |
|---|---|
1 |
0.25 |
Trigonometriske funksjoner
De trigonometriske funksjonene aksepterer én numerisk verdi og returnerer en DOUBLE.
Et nullargument gir null.
| Function | Description |
|---|---|
SIN(value), , COS(value), TAN(value)COT(value) |
Beregn en trigonometrisk funksjon.
value er en vinkel i radianer. |
ASIN(value), ACOS(value), ATAN(value) |
Beregn en invers trigonometrisk funksjon. Resultatet er i radianer.
ASIN og ACOS krever en verdi fra -1 gjennom 1. |
SINH(value), COSH(value), TANH(value) |
Beregn en hyperbolsk funksjon. |
DEGREES(value) |
Konverterer en vinkel fra radianer til grader. |
RADIANS(value) |
Konverterer en vinkel fra grader til radianer. |
Et argument utenfor en funksjons matematiske domene gir en feil.
RETURN COS(0) AS cosine, RADIANS(180) AS angle
Resultatet er:
| Cosinus | Vinkel |
|---|---|
1.0 |
3.141592653589793238462643383279502884 |
Heltalsområder
RANGE(start, end) returnerer en liste med heltall fra start mot end, ved å bruke et steg i 1.
RANGE(start, end, step) bruker det spesifiserte ikke-null trinnet.
start, end, og step må være ikke-null heltall. Null er gyldig for start eller end; må bare step være ikke-null.
Området inkluderer start. Det gjelder end bare når man gjentatte ganger legger til step nøyaktig rekker end . Et positivt steg med start større enn end, eller et negativt steg med start mindre enn end, returnerer en tom liste. Et nulltrinn gir en feil.
RETURN RANGE(0, 10, 3) AS ascending, RANGE(5, 0, -2) AS descending
Resultatet er:
| stigende | Nedadgående |
|---|---|
[0, 3, 6, 9] |
[5, 3, 1] |
Hvis alle argumenter er usignerte heltall, RANGE returnerer en LIST<UINT64>.
Ellers returnerer den a LIST<INT64> og avviser verdier som ikke trygt kan representeres som signerte heltall.
Mengdefunksjoner
Aggregerte funksjoner kombinerer verdier enten på tvers av inngangsrader eller innenfor en gruppeliste avgrenset av et mønster med variabel lengde.
| Function | Description |
|---|---|
COUNT(*) |
Teller inngangsrader, inkludert rader som inneholder nullverdier. |
COUNT(expression) |
Teller ikke-nulle resultater av expression. |
SUM(expression) |
Returnerer summen av ikke-null numeriske verdier. |
AVG(expression) |
Returnerer gjennomsnittet av ikke-null numeriske verdier. |
MIN(expression) |
Returnerer den minste ikke-nullverdien. |
MAX(expression) |
Returnerer den maksimale ikke-nullverdien. |
COLLECT_LIST(expression) |
Returnerer en liste med ett element for hver input, inkludert nullelementer. |
COLLECT_ONE(expression) |
Returnerer én ikke-null inngangsverdi. Den valgte verdien er ikke deterministisk. |
COLLECT_ELEMENTS(expression) |
Sammenketter elementene i listeverdi-inndata til én liste. Null-inputlister bidrar ikke med noen elementer, men null-elementer i en liste forblir i resultatet. |
Når en aggregert spørring ikke har grupperingskolonner og ikke mottar noen inngangsrader, COUNT returnerer 0, COLLECT_LIST og COLLECT_ELEMENTS returnerer en tom liste, og de andre aggregerte funksjonene returnerer null. Ikke stol på rekkefølgen på verdiene som returneres av et samlingsaggregat. Med grupperingskolonner produserer ingen inngangsrader ingen gruppe og dermed ingen resultatrad.
Mengdekvantorer
Bruk ALL for å inkludere duplikatverdier eller DISTINCT for å fjerne dem.
ALL er standard for uttrykksaggregater.
COUNT(*) godtar ikke en mengdekvantor.
MATCH (person:Person)
RETURN COUNT(person) AS personCount,
COUNT(DISTINCT person.browserUsed) AS browserCount
For COLLECT_LIST, DISTINCT fjerner duplikatverdiene og beholder maksimalt én null. For COLLECT_ELEMENTSgjelder , DISTINCT for elementene etter at inndatalistene er sammenflettet.
DISTINCT Det gjør COLLECT_ONE ikke deterministisk.
Aggregatspesifikke filtre og grenser
Legg til FILTER (WHERE predicate) etter en aggregasjon for å inkludere kun verdier for som predicate er sann. Falske og ukjente predikatresultater utelukkes.
Dette filteret påvirker kun denne aggregasjonen, ikke inndataradene som er tilgjengelige for andre uttrykk i samme RETURN.
Legg til LIMIT n i aggregasjonsfilteret for å vurdere maksimalt n kvalifiserende inngangsrader. Filtrering skjer før den aggregatspesifikke grensen, og DISTINCT anvendes etter grensen.
MATCH (person:Person)
RETURN COUNT(*) AS allPeople,
COUNT(*) FILTER (WHERE person.birthday < 19900101 LIMIT 5) AS sampleBornBefore1990
Aggregering over rader
Et aggregat kombinerer normalt verdier vertikalt over inngangsrader. Bruk GROUP BY det til å beregne ett resultat for hver gruppe.
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
Ikke plasser ett vertikalt aggregat direkte inne i et annet i samme spørringsblokk. For eksempel er SUM(COUNT(*)) ugyldig. Bruk NEXT den til å skille aggregeringstrinnene når du må aggregere et aggregert resultat.
Aggregering innenfor en matchet sti
En kantvariabel bundet av et mønster med variabel lengde blir en gruppeliste. Et aggregat over den variabelen er horisontalt: det beregner ett resultat i listen for hver matchet sti i stedet for å kombinere ulike inndatarader.
MATCH (person:Person)-[knows:knows]->{1,5}(friend:Person)
RETURN COUNT(knows) AS pathLength
Her COUNT(knows) returnerer antallet kanter i hver matchet sti. De horisontale formene til COUNT, SUM, , AVGMIN, MAX, COLLECT_LIST, , COLLECT_ONEog COLLECT_ELEMENTS støttes.
COUNT(*) og aggregat-spesifikke FILTER eller LIMIT ikke er horisontale former.
Et horisontalt aggregat kan være inngangen til ett ytre vertikalt aggregat:
MATCH (person:Person)-[knows:knows]->{1,5}(friend:Person)
RETURN MIN(COUNT(knows)) AS shortestMatchedPath
I denne spørringen COUNT(knows) beregnes én lengde per matchet sti, og MIN kombineres disse lengdene over inngangsradene.
For oppgaveorienterte eksempler, se Filter og aggregere grafdata.
Betingede uttrykk
Bruk et enkelt CASE uttrykk for å sammenligne ett uttrykk med én eller flere verdier og returner resultatet knyttet til den første like verdien:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
NULLHVIS:
NULLIF(a, b) returnerer NULL hvis a er lik b, ellers returneres a.
Eksempel:
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
Søkte CASE WHEN <predicate> uttrykk støttes ikke. For å rute rader etter predikater og kjøre en spørringssetning eller nestet prosedyre for den valgte grenen, bruk en WHEN betinget setning.
Streng-funksjoner
Bruk strengfunksjoner for å måle, transformere, søke, sammenligne og kombinere tegnstrenger.
Tegnlengde og kasus
Bruk disse funksjonene til å måle eller endre tegnstrenger:
| Function | Description |
|---|---|
CHAR_LENGTH(string) |
Returnerer antall tegn. |
UPPER(string) |
Bruker Unicode-mapping med store bokstaver. |
LOWER(string) |
Bruker Unicode-mapping med små bokstaver. |
CASEFOLD(string) |
Anvender lokaluavhengig Unicode-kasusfolding for caseløs matching. |
Unicode-avbildninger kan endre lengden eller representasjonen av en streng:
RETURN UPPER('straße') AS uppercase,
LOWER('İ') AS lowercase,
CASEFOLD('Straße') AS folded
Resultatene er STRASSEhenholdsvis , i̇, og strasse, .
CASEFOLD er ikke ekvivalent med LOWER. For eksempel kartlegger ß kasusfolding til ss og avbilder de greske sigma-formene Σ, σ, og ς til .σ
Normaliser strenger
GQL definerer fire Unicode-normaliseringsformer:
- Normaliseringsform C (
NFC), kanonisk sammensetning. - Normaliseringsform D (
NFD), kanonisk dekomponering. - Normaliseringsform KC (
NFKC), kompatibilitetssammensetning. - Normaliseringsform KD (
NFKD), kompatibilitetsdekomponering.
NORMALIZE(string) går som standard til NFC. Spesifiser en normaliseringsform som det andre argumentet:
RETURN NORMALIZE('cafe\u0301') AS composed,
NORMALIZE('café', NFD) AS decomposed
Argumentet må være en streng.
Important
Graph støtter for øyeblikket NFC og NFD. Å spesifisere NFKC eller NFKD gir en feil.
Trimstrenger
Bruk TRIM for å fjerne mellomromstegn eller ett spesifisert tegn fra begge ender, begynnelsen eller slutten av en streng:
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
Den tilpassede trimverdien må være nøyaktig én byte. Multibyte Unicode-tegn og strenger som inneholder flere tegn støttes ikke som egendefinerte trimverdier. En nullkilde eller tilpasset trimverdi returnerer null.
Sammenføy strenger
STRING_JOIN(list [, delimiter]) slutter seg til en liste med strenger. Standardavgrenseren er et komma etterfulgt av et mellomrom:
RETURN STRING_JOIN(['foo', 'bar', 'baz']) AS default_delimiter,
STRING_JOIN(['foo', 'bar', 'baz'], '-') AS custom_delimiter
Resultatene er foo, bar, baz og foo-bar-baz. En tom liste returnerer en tom streng. En nullliste, nullavgrenser eller nullliste-element returnerer null. Hvert ikke-nullliste-element må være en streng.
Regulære uttrykksfunksjoner
Graph gir disse regulære uttrykksfunksjonene som utvidelser til GQL:
| Function | Bruk |
|---|---|
MSFT.REGEXP_LIKE |
Test om teksten inneholder en match. |
MSFT.REGEXP_COUNT |
Telling stemmer. |
MSFT.REGEXP_INSTR |
Finn posisjonen til en kamp- eller fangstgruppe. |
MSFT.REGEXP_SUBSTR |
Returner teksten til en kamp- eller fangstgruppe. |
MSFT.REGEXP_REPLACE |
Bytt ut matchende tekst. |
MSFT.REGEXP_LIKE
Returnerer TRUE når mønsteret matcher en hvilken som helst del av kildestrengen. Hvis ingen treff finnes, returnerer FALSEden .
| Argumenter | Syntaks |
|---|---|
| 2 | MSFT.REGEXP_LIKE(source, pattern) |
| 3 | MSFT.REGEXP_LIKE(source, pattern, flags) |
source er strengen som skal søkes.
pattern matches mot en hvilken som helst delstreng av source med mindre uttrykket selv bruker ankere som ^ eller $.
flags endrer matching-atferd som beskrevet i Matching-regler og -alternativer.
RETURN MSFT.REGEXP_LIKE('HELLO', 'hello', 'i') AS matches
Resultatet er TRUE.
MSFT.REGEXP_COUNT
Returnerer antall matcher. Hvis ingen treff finnes, returnerer 0den .
| Argumenter | Syntaks |
|---|---|
| 2 | MSFT.REGEXP_COUNT(source, pattern) |
| 3 | MSFT.REGEXP_COUNT(source, pattern, start) |
| 4 | MSFT.REGEXP_COUNT(source, pattern, start, flags) |
source er strengen som skal søkes, og pattern identifiserer matchene som skal telles.
start er den nullbaserte Unicode-kodepunktposisjonen hvor matching kan begynne. En kamp må starte på eller etter denne posisjonen. Posisjonen blir ikke en ny begynnelse for forankrede mønstre.
flags endrer matching-atferd som beskrevet i Matching-regler og -alternativer.
RETURN MSFT.REGEXP_COUNT('1a2a3a4', '[0-9]', 3) AS match_count
Søket starter på posisjon 3, den andre a, så kun sifrene 3 og 4 telles. Resultatet er 2.
MSFT.REGEXP_INSTR
Returnerer null-posisjonen til en valgt kamp- eller fangstgruppe.
| Argumenter | Syntaks |
|---|---|
| 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 er strengen som skal søkes, og pattern identifiserer matchene.
start er den nullbaserte Unicode-kodepunktposisjonen hvor matching kan begynne. En kamp må starte på eller etter denne posisjonen, som ikke blir en ny begynnelse på strengen for forankrede mønstre.
occurrence velger den første, andre eller påfølgende ikke-overlappende matchen funnet fra start.
group Velger hva som skal plasseres i den matchen: 0 Velger den komplette matchen, og en positiv verdi velger den nummererte capture-gruppen.
return_option avgjør hvilken grense i den valgte kampen eller gruppen som returneres: 0 returnerer sin startposisjon, og 1 returnerer posisjonen umiddelbart etter slutten.
flags endrer matching-atferd som beskrevet i Matching-regler og -alternativer.
Hvis ingen matchende forekomst finnes, eller den valgte fangstgruppen ikke deltar i denne forekomsten, returnerer -1funksjonen .
RETURN MSFT.REGEXP_INSTR('banana', 'a', 0, 2) AS match_position
Den andre matchen starter på posisjon 3, så resultatet blir 3.
MSFT.REGEXP_SUBSTR
Returnerer teksten til en valgt kamp- eller fangstgruppe.
| Argumenter | Syntaks |
|---|---|
| 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 er strengen som skal søkes, og pattern identifiserer matchene.
start er den nullbaserte Unicode-kodepunktposisjonen hvor matching kan begynne. En kamp må starte på eller etter denne posisjonen, som ikke blir en ny begynnelse på strengen for forankrede mønstre.
occurrence velger den første, andre eller påfølgende ikke-overlappende matchen funnet fra start.
group velger teksten som skal returneres fra den matchen: 0 velger den komplette matchen, og en positiv verdi velger den nummererte capture-gruppen.
flags endrer matching-atferd som beskrevet i Matching-regler og -alternativer.
Hvis ingen matchende forekomst finnes, eller den valgte capture-gruppen ikke deltar i den forekomsten, returnerer funksjonen null.
RETURN MSFT.REGEXP_SUBSTR(
'12-345',
'([0-9]+)-([0-9]+)',
0,
1,
'',
2
) AS matched_text
Den første forekomsten er den komplette strengen, og fangstgruppen 2 er 345, så resultatet er 345.
MSFT.REGEXP_REPLACE
Erstatter matchende tekst. Som standard erstatter den alle treff og setter inn erstatningsteksten bokstavelig talt.
| Argumenter | Syntaks |
|---|---|
| 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 er strengen som skal endres, og pattern identifiserer matchene.
replacement er teksten som er satt inn for en valgt match.
EXACT setter det bokstavelig talt inn; TEMPLATE tolker capture-referanser.
start er den null-baserte Unicode-kodepunktposisjonen hvor utskifting kan begynne. En kamp må starte på eller etter denne posisjonen. Teksten før start bevares uendret, og posisjonen blir ikke en ny begynnelse på strengen for forankrede mønstre. Sett occurrence til 0 for å erstatte hver match fra start, eller til en positiv verdi for kun å erstatte den nummererte ikke-overlappende matchen. Tidligere matcher forblir start uendret når en bestemt hendelse velges.
flags endrer matching-atferd som beskrevet i Matching-regler og -alternativer.
RETURN MSFT.REGEXP_REPLACE('a1b2c3', '[0-9]', '#', 0, 2) AS replaced
Kun det andre sifret matches erstattes, så resultatet blir a1b#c3.
Hvis ingen match finnes, returneres kildestrengen uendret.
For å gjenbruke matchet tekst i erstatningen, spesifiser TEMPLATE. I denne modusen \0 refererer du til \9 komplette kamp- og fangstgrupper, og \\ legger inn en bokstavelig backslash. Bruk et rått strengliteral, med prefikset @, for å sende disse referansene uten ytterligere unnslipp:
RETURN MSFT.REGEXP_REPLACE(
'John Smith',
@'([A-Za-z]+) ([A-Za-z]+)',
TEMPLATE @'\2 \1'
) AS reordered_name
Resultatet er Smith John.
Matchingsregler og alternativer
Mønstre bruker RE2 regulær uttrykkssyntaks og matcher Unicode-strenger. Kilden kan være hvilken som helst strenguttrykk. Mønsteret, flaggene og erstatningen må være strenglitteraler, og numeriske alternativer må være usignerte heltallsliteraler.
Treff finnes fra venstre mot høyre uten overlapp. Etter en null-lengde matching går matching videre med ett Unicode-kodepunkt.
Startposisjoner og returnerte posisjoner er nullbaserte Unicode-kodepunktforskyvninger. Forekomstnumre er ettbaserte, bortsett fra at forekomst 0 betyr å erstatte alle forekomster i MSFT.REGEXP_REPLACE.
Tabellen nedenfor viser standardinnstillingene for utelatte valgfrie argumenter:
| Function | Defaults |
|---|---|
MSFT.REGEXP_LIKE |
Flaggene er tomme. |
MSFT.REGEXP_COUNT |
Start er 0; flaggene er tomme. |
MSFT.REGEXP_INSTR |
Start er 0; forekomst er 1; returalternativ er 0; flaggene er tomme; gruppen er 0. |
MSFT.REGEXP_SUBSTR |
Start er 0; forekomst er 1; flaggene er tomme; gruppen er 0. |
MSFT.REGEXP_REPLACE |
Modus er EXACT; start er 0; forekomst er 0; flaggene er tomme. |
De valgfrie flaggene er:
| Flagg | Virkemåte |
|---|---|
i |
Match uten hensyn til sak. |
m |
Lag ^ og $ match begynnelsen og slutten av hver linje. |
s |
Lag . samsvarende linjeskift. |
Kombiner flagg i én streng, for eksempel 'ims'. En nullkilde returnerer null. Et ustøttet flagg, ugyldig regulært uttrykk, ugyldig returalternativ eller ugyldig forekomst- eller gruppenummer gir en feilmelding.
Graf-funksjoner
-
nodes(path)– returnerer noder fra en baneverdi. -
edges(path)– returnerer kanter fra en baneverdi. -
elements(path)– returnerer alle noder og kanter fra en bane som én enkelt liste, i banerekkefølge. -
labels(node_or_edge)– returnerer etikettene for en node eller kant som en liste over strenger. -
path_length(path)– returnerer antallet kanter i en bane. -
element_id(node_or_edge)- returnerer node- eller kantidentifikatoren som en ugjennomsiktig streng.
ELEMENT_ID aksepterer en node- eller kantreferanse og returnerer null for en null input.
Behandle den returnerte strengen som ugjennomsiktig.
Eksempel:
MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues, path_length(p) AS hops
Listefunksjoner
-
size(list)– returnerer størrelsen på en listeverdi. -
trim(list,n)- trimmer en liste til de flestenelementer.
Eksempel:
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
Temporale funksjoner
-
CURRENT_TIMESTAMP– returnerer gjeldende sonedato. -
ZONED_DATETIME(string)- returnerer den sonerte dato-tiden representert ved en ISO 8601-streng. -
DURATION(string)- returnerer dagtidsvarigheten representert ved en ISO 8601-varighetsstreng.
Eksempel:
RETURN CURRENT_TIMESTAMP AS now,
DURATION('PT2H') AS twoHours
Bruk subtraksjonsoperatoren for å utlede en varighet mellom to sonerte datoer:
RETURN ZONED_DATETIME('2026-09-17T12:00:00Z')
- ZONED_DATETIME('2026-09-17T10:00:00Z') AS elapsed
Important
Grafen støtter dagtidsvarigheter, men ikke år-måned-varigheter.
DURATION_BETWEEN(start, end) ikke støttes for øyeblikket; trekk fra de to sonerte dato-tid-verdiene i stedet.
Generiske funksjoner
-
coalesce(value1, value2, ...)– returnerer den første verdien som ikke er null. -
to_json_string(value)– konverterer en verdi til JSON-strengrepresentasjonen.
Eksempel:
MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name,
to_json_string(p) AS person_json