Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Denne artikel indeholder en omfattende reference til GQL-udtryk, prædikater og indbyggede funktioner, der er tilgængelige i graph i Microsoft Fabric-forespørgsler. Brug denne reference til at forstå, hvordan du udfører beregninger, filtrerer resultater og transformerer data i dine grafforespørgsler.
Du kan få en oversigt over GQL-forespørgselssproget og eksempler på komplette forespørgsler i GQL-sprogvejledningen. Du kan få oplysninger om understøttede datatyper og konstantsyntaks under GQL-værdier og værdityper.
Konstanter
Konstanter er simple udtryk, der direkte evalueres til den angivne værdi. I artiklen GQL-værdier og værdityper forklares konstanter for hver type værdi i detaljer.
Eksempel:
1
1.0d
1.00m
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL
Du kan finde detaljerede konstantsyntaks for hver datatype under GQL-værdier og værdityper.
Prædikater
Prædikater er booleske udtryk, som du ofte bruger til at filtrere resultater i GQL-forespørgsler. De evalueres til TRUE, FALSEeller UNKNOWN (null).
Advarsel
Når du bruger prædikater som et filter, bevarer de kun de elementer, som prædikatet evalueres for som TRUE.
Prædikater til sammenligning
Brug disse operatorer til at sammenligne værdier:
-
=(lig med) -
<>(ikke lig med) -
<(mindre end) -
>(større end) -
<=(mindre end eller lig med) -
>=(større end eller lig med)
GQL bruger tre-værdibaseret logik, hvor sammenligninger med null-returnering UNKNOWN:
| Expression | Result |
|---|---|
5 = 5 |
TRUE |
5 = 3 |
FALSE |
5 = NULL |
UNKNOWN |
NULL = NULL |
UNKNOWN |
Du kan se en specifik sammenligningsfunktion i dokumentationen for hver værditype i GQL-værdier og værdityper.
Eksempel:
MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName
Hvis begge operander er tal, sammenligner GQL dem med deres numeriske værdier.
Vigtigt!
Graph understøtter endnu ikke alle numeriske sammenligninger, som GQL definerer. Den nuværende adfærd bruger disse regler:
- En sammenligning mellem et heltal og et omtrentligt tal konverterer heltallet til en tilnærmet numerisk type.
- En sammenligning mellem signerede og usignerede heltalsværdier konverterer generelt begge værdier til en signeret heltalstype. En usigneret værdi uden for det signerede heltalsinterval forårsager en fejl.
Logiske udtryk
Kombiner betingelser med logiske operatorer:
-
AND(begge betingelser er sande) -
OR(begge betingelser er sande) -
NOT(negerer betingelse) -
XOR(eksklusiv fjernelse – sand, når præcis én operand er sand)
Eksempel:
MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName
Prædikater for egenskabens eksistens
Hvis du vil kontrollere, om der findes egenskaber, skal du bruge disse prædikater:
p.locationIP IS NOT NULL
p.browserUsed IS NULL
Notat
Forsøg på at tilgå en kendt ikke-eksisterende egenskab resulterer i en syntaksfejl.
Adgang til en potentielt ikke-eksisterende ejendom vurderer til null.
Afgørelsen af, om en egenskab er kendt eller potentielt ikke-eksisterende, er baseret på typen af den node eller kant, der er adgang til.
Eksistens-underforespørgsler
Brug en procedureform-underforespørgsel EXISTS til at teste, om en indlejret forespørgsel returnerer mindst én række:
EXISTS {
<query statements>
RETURN <columns>
}
Resultatet er en ikke-nul boolesk værdi:
-
TRUEhvis underforespørgslen returnerer en eller flere rækker. -
FALSEhvis underforespørgslen ikke returnerer nogen rækker.
Variable, der allerede er inden for scope, er implicit tilgængelige inde i underforespørgslen. Variable, der kun introduceres inde i underforespørgslen, er ikke tilgængelige uden for den.
Brug EXISTS i et filter:
MATCH (p:Person)
WHERE EXISTS {
MATCH (p)-[:knows]->(friend:Person)
RETURN friend
}
RETURN p.firstName, p.lastName
Brug NOT EXISTS til at bevare rækker, hvor underforespørgslen ikke returnerer nogen rækker. Du kan også bruge EXISTS i LET, RETURN, ORDER BY, og aggregere filter- eller kildeudtryk.
EXISTS understøttes ikke i et listepredikatfilter.
Vigtigt!
Grafmønstre-only former som EXISTS { (p)-[:knows]->(friend) } og EXISTS ((p)-[:knows]->(friend)) understøttes ikke. Brug procedureformen, der vises i de foregående eksempler. Skalar-subforespørgsler VALUE { ... } understøttes ikke.
Advarsel
EXISTS tester om delforespørgslen returnerer en række, ikke om en samlet værdi er forskellig fra nul. Et ugrupperet aggregat som RETURN count(*) returnerer én række, selv når MATCH der ikke findes nogen rækker, så den form af EXISTS evaluerer til TRUE. Returner en matchet variabel, når du vil teste, om matches findes.
For mere information om korrelerede underforespørgsler, se erklæringenCALL i GQL-sprogguiden.
Prædikater for listemedlemskab
Test, om værdierne findes på lister:
p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']
List prædikatfunktioner
Brug en listeprædikatfunktion til at evaluere et boolesk udtryk for elementerne 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 listeværdi-egenskab, en variabel eller en gruppeliste fra et variabel-længde mønster.
Funktionerne har følgende betydninger:
| Function | Betydning |
|---|---|
ALL |
Hvert element opfylder prædikatet. |
ANY |
Mindst ét element opfylder prædikatet. |
NONE |
Intet element opfylder prædikatet. |
SINGLE |
Præcis ét element opfylder prædikatet. |
Følgende eksempel evaluerer alle fire funktioner over en dynamisk konstrueret 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 fire returnerede værdier er TRUE.
Du kan også evaluere egenskaber ved elementer ud fra en liste. I dette eksempel connections er gruppelisten skabt af det variabel-længde kantmønster:
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
Listeprædikater bruger tre-værdi logik. Tabellen beskriver resultatet i form af værdierne produceret af filterudtrykket for listeelementerne:
| Function | TRUE |
FALSE |
UNKNOWN |
Tom liste |
|---|---|---|---|---|
ALL |
Hvert filterresultat er TRUE. |
Mindst ét resultat er FALSE. |
Intet resultat er FALSE, og mindst ét er UNKNOWN. |
TRUE |
ANY |
Mindst ét filterresultat er TRUE. |
Intet resultat er TRUE eller UNKNOWN. |
Intet resultat er TRUE, og mindst ét er UNKNOWN. |
FALSE |
NONE |
Intet resultat er TRUE eller UNKNOWN. |
Mindst ét resultat er TRUE. |
Intet resultat er TRUE, og mindst ét er UNKNOWN. |
TRUE |
SINGLE |
Præcis ét resultat er TRUE, og intet er UNKNOWN. |
Mere end ét resultat er TRUE, eller intet resultat er TRUE eller UNKNOWN. |
Højst ét resultat er TRUE, og mindst ét er UNKNOWN. |
FALSE |
Hvis kildelisten er null, returnerer UNKNOWNhver funktion . Et nullliste-element bidrager med resultatet af at evaluere filteret med det element bundet til null; det gør ikke automatisk funktionsresultatet ukendt.
Elementvariabelen er kun tilgængelig inden for listeprædikatets filterudtryk. Filteret kan også referere til variabler fra den omsluttende forespørgsel. Hvis elementvariabelen har samme navn som en ydre variabel, har den lokale elementvariabel forrang. Indelagte listeprædikater kan på samme måde skygge en ydre elementvariabel.
Aggregerede funktioner kan referere til en omsluttende gruppeliste, men de kan ikke aggregere den lokalt bundne elementvariabel.
EXISTS Subforespørgsler understøttes heller ikke i et listeprædikatfilter.
ANY(...) er en listeprædikatfunktion. Forveksl det ikke med ANY SHORTEST sti-søgepræfikset eller den dynamiske ANY værditype.
Prædikater for strengmønster
Søg efter strenge ved hjælp af teknikker til matchning af mønstre:
p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'
For RE2 regulær udtryksmatchning, brug MSFT.REGEXP_LIKE.
Aritmetiske udtryk
Brug aritmetiske standardoperatorer med numeriske værdier:
-
+(tilføjelse) -
-(subtraktion) -
*(multiplikation) -
/(division)
Aritmetiske operatorer følger generelle matematiske konventioner.
Forrang:
Operatorer følger generelt de etablerede regler for prioritet for operatorer, f.eks * . før +. Brug parenteser til at styre evalueringsrækkefølgen efter behov.
Eksempel:
(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'
Regler for tvangsforanstaltninger:
Brug følgende regler i prioriteret rækkefølge:
- Aritmetiske udtryk, der involverer en tilnærmet numerisk type, returnerer en tilnærmet numerisk type.
- Aritmetiske udtryk, der involverer både signerede og usignerede heltalstyper, returnerer en signeret heltalstype.
Egenskabsadgang
Access-egenskaber ved hjælp af punktnotation:
p.firstName
edge.creationDate
Listeadgang
Få adgang til listeelementer ved hjælp af nulbaseret indeksering:
interests[0] -- first element
interests[1] -- second element
Indbyggede funktioner
GQL understøtter forskellige indbyggede funktioner til databehandling og analyse.
Numeriske funktioner
Brug numeriske funktioner til at transformere numeriske værdier, beregne trigonometriske værdier og skabe heltalsintervaller.
Absolut værdi og magt
| Function | Description |
|---|---|
ABS(value) |
Returnerer den absolutte værdi. Resultatet har samme numeriske type som value. |
POWER(base, exponent) |
Hæver til exponent og returnerer base en DOUBLE. |
Begge funktioner accepterer numeriske værdier. Et nulargument producerer null. En ugyldig numerisk operation, såsom et overløbsresultat POWER , giver en fejl.
RETURN ABS(-1) AS absoluteValue, POWER(2, -2) AS reciprocalSquare
Resultatet er:
| absoluteValue | reciprocalSquare |
|---|---|
1 |
0.25 |
Trigonometriske funktioner
De trigonometriske funktioner accepterer én numerisk værdi og returnerer en DOUBLE.
Et nulargument producerer null.
| Function | Description |
|---|---|
SIN(value), , COS(value)TAN(value),COT(value) |
Beregn en trigonometrisk funktion.
value er en vinkel i radianer. |
ASIN(value), ACOS(value), ATAN(value) |
Beregn en invers trigonometrisk funktion. Resultatet er i radianer.
ASIN og ACOS kræver en værdi fra -1 gennem 1. |
SINH(value), COSH(value), TANH(value) |
Beregn en hyperbolsk funktion. |
DEGREES(value) |
Konverterer en vinkel fra radianer til grader. |
RADIANS(value) |
Konverterer en vinkel fra grader til radianer. |
Et argument uden for en funktions matematiske domæne giver en fejl.
RETURN COS(0) AS cosine, RADIANS(180) AS angle
Resultatet er:
| cosinus | Vinkel |
|---|---|
1.0 |
3.141592653589793238462643383279502884 |
Heltalsintervaller
RANGE(start, end) returnerer en liste af heltal fra start mod end, ved hjælp af et trin af 1.
RANGE(start, end, step) bruger det specificerede ikke-nul trin.
start, end, og step skal være ikke-nul heltal. Nul er gyldig for start eller end; kun step skal være forskellig fra nul.
Rækkevidden inkluderer start. Det gælder end kun, når gentagne gange tilføjer step rækker præcist end . Et positivt trin med start større end end, eller et negativt trin med start mindre end end, returnerer en tom liste. Et nultrin giver en fejl.
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 usignerede heltal, RANGE returnerer en LIST<UINT64>.
Ellers returnerer den a LIST<INT64> og afviser værdier, der ikke sikkert kan repræsenteres som fortegnede heltal.
Aggregeringsfunktioner
Aggregerede funktioner kombinerer værdier enten på tværs af inputrækker eller inden for en gruppeliste, der er afgrænset af et mønster med variabel længde.
| Function | Description |
|---|---|
COUNT(*) |
Tæller inputrækker, inklusive rækker der indeholder nullværdier. |
COUNT(expression) |
Tæller ikke-nul resultater af expression. |
SUM(expression) |
Returnerer summen af ikke-nul numeriske værdier. |
AVG(expression) |
Returnerer gennemsnittet af ikke-nul numeriske værdier. |
MIN(expression) |
Returnerer den mindste ikke-nul værdi. |
MAX(expression) |
Returnerer den maksimale ikke-nul værdi. |
COLLECT_LIST(expression) |
Returnerer en liste med ét element for hvert input, inklusive null-elementer. |
COLLECT_ONE(expression) |
Returnerer én ikke-nul inputværdi. Den valgte værdi er ikke deterministisk. |
COLLECT_ELEMENTS(expression) |
Sammenkæder elementerne af listeværdiede input til én liste. Null-inputlister bidrager ikke med elementer, men null-elementer inden for en liste forbliver i resultatet. |
Når en aggregeret forespørgsel ikke har grupperingskolonner og ikke modtager input-rækker, COUNT returnerer 0, COLLECT_LIST og COLLECT_ELEMENTS returnerer en tom liste, og de øvrige aggregerede funktioner returnerer null. Stol ikke på rækkefølgen af værdier, der returneres af en samlingsgruppe. Med grupperingskolonner producerer ingen inputrækker ingen gruppe og dermed ingen resultatrække.
Mængdekvantorer
Brug ALL det til at inkludere dubletværdier eller DISTINCT fjerne dem.
ALL er standarden for udtryksaggregater.
COUNT(*) accepterer ikke en mængdekvantor.
MATCH (person:Person)
RETURN COUNT(person) AS personCount,
COUNT(DISTINCT person.browserUsed) AS browserCount
For COLLECT_LISTfjerner fjerner DISTINCT de dubblerede værdier og bevarer højst én null. For COLLECT_ELEMENTSgælder for DISTINCT elementerne efter at inputlisterne er sammenkædet.
DISTINCT Det gør COLLECT_ONE ikke deterministisk.
Aggregat-specifikke filtre og grænser
Læg FILTER (WHERE predicate) efter et aggregat for kun at inkludere værdier , for hvor predicate er sand. Falske og ukendte prædikatresultater udelukkes.
Dette filter påvirker kun denne aggregat, ikke inputrækkerne, der er tilgængelige for andre udtryk i samme RETURN.
Tilføj LIMIT n i aggregationsfilteret for at tage højde for højst n kvalificerende inputrækker. Filtrering sker før den aggregatspecifikke grænse og DISTINCT anvendes efter grænsen.
MATCH (person:Person)
RETURN COUNT(*) AS allPeople,
COUNT(*) FILTER (WHERE person.birthday < 19900101 LIMIT 5) AS sampleBornBefore1990
Aggregering på tværs af rækker
Et aggregat kombinerer normalt værdier vertikalt på tværs af inputrækker. Brug GROUP BY den til at beregne ét 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
Placer ikke én vertikal aggregate direkte inde i en anden i samme forespørgselsblok. For eksempel SUM(COUNT(*)) er ugyldig. Brug NEXT den til at adskille aggregeringstrinene, når du skal aggregere et aggregeret resultat.
Aggregering inden for en matchet sti
En kantvariabel bundet af et mønster med variabel længde bliver til en gruppeliste. Et aggregat over den variabel er horisontalt: det beregner ét resultat i listen for hver matchet sti i stedet for at kombinere forskellige inputrækker.
MATCH (person:Person)-[knows:knows]->{1,5}(friend:Person)
RETURN COUNT(knows) AS pathLength
Her COUNT(knows) returnerer antallet af kanter i hver matchet sti. De horisontale former af COUNT, SUM, AVG, MIN, , COLLECT_LISTMAX, , COLLECT_ONE, og COLLECT_ELEMENTS understøttes.
COUNT(*) og aggregat-specifikke FILTER eller LIMIT ikke er horisontale former.
Et horisontalt aggregat kan være input til et ydre vertikalt aggregat:
MATCH (person:Person)-[knows:knows]->{1,5}(friend:Person)
RETURN MIN(COUNT(knows)) AS shortestMatchedPath
I denne forespørgsel COUNT(knows) beregnes én længde per matchet sti og MIN kombineres disse længder på tværs af input-raderne.
For opgaveorienterede eksempler, se Filter og aggreger grafdata.
Betingede udtryk
Brug et simpelt CASE udtryk til at sammenligne et udtryk med en eller flere værdier og returner resultatet tilknyttet den første lige værdi:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
NULLIF:
NULLIF(a, b) returnerer NULL , hvis a er blig med , 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øgte CASE WHEN <predicate> udtryk understøttes ikke. For at rute rækker efter prædikater og køre en forespørgselssætning eller en indlejret procedure for den valgte gren, brug en WHEN betinget sætning.
Streng funktioner
Brug strengfunktioner til at måle, transformere, søge, sammenligne og kombinere tegnstrenge.
Tegnlængde og kasus
Brug disse funktioner til at måle eller ændre tegnstrenge:
| Function | Description |
|---|---|
CHAR_LENGTH(string) |
Returnerer antallet af tegn. |
UPPER(string) |
Anvender Unicode store bogstaver. |
LOWER(string) |
Anvender Unicode-kortlægning. |
CASEFOLD(string) |
Anvender lokal-uafhængig Unicode case folding til caseless matching. |
Unicode-mappinger kan ændre længden eller repræsentationen af en streng:
RETURN UPPER('straße') AS uppercase,
LOWER('İ') AS lowercase,
CASEFOLD('Straße') AS folded
Resultaterne er STRASSEhenholdsvis , i̇, og strasse, .
CASEFOLD er ikke ækvivalent med LOWER. For eksempel kortlægger ß kasusfoldning til ss og afbilder de græske sigma-former Σ, σ, og ς til σ.
Normaliser strenge
GQL definerer fire Unicode-normaliseringsformer:
- Normaliseringsform C (
NFC), kanonisk sammensætning. - Normaliseringsform D (
NFD), kanonisk dekomponering. - Normaliseringsform KC (
NFKC), kompatibilitetssammensætning. - Normaliseringsform KD (
NFKD), kompatibilitetsdekomponering.
NORMALIZE(string) går som standard til NFC. Angiv en normaliseringsform som det andet argument:
RETURN NORMALIZE('cafe\u0301') AS composed,
NORMALIZE('café', NFD) AS decomposed
Argumentet skal være en streng.
Vigtigt!
Graph understøtter i øjeblikket NFC og NFD. Angivelse af NFKC eller NFKD giver en fejl.
Trimstrenge
Brug TRIM til at fjerne mellemrumstegn eller et specificeret tegn fra begge ender, begyndelsen eller slutningen af 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 trimværdi skal være præcis én byte. Multibyte Unicode-tegn og strenge, der indeholder flere tegn, understøttes ikke som brugerdefinerede trim-værdier. En null-kilde eller en tilpasset trim-værdi returnerer null.
Sammensæt strenge
STRING_JOIN(list [, delimiter]) slutter sig til en liste af strenge. Standardskilletegnet er et komma efterfulgt af et mellemrum:
RETURN STRING_JOIN(['foo', 'bar', 'baz']) AS default_delimiter,
STRING_JOIN(['foo', 'bar', 'baz'], '-') AS custom_delimiter
Resultaterne er foo, bar, baz og foo-bar-baz. En tom liste returnerer en tom streng. En nullliste, nulafgrænser eller nullliste-element returnerer null. Hvert ikke-nulliste-element skal være en streng.
Regulære udtryksfunktioner
Graph tilbyder disse regulære udtryksfunktioner som udvidelser til GQL:
| Function | Brug |
|---|---|
MSFT.REGEXP_LIKE |
Test om teksten indeholder et match. |
MSFT.REGEXP_COUNT |
Tælling matcher. |
MSFT.REGEXP_INSTR |
Find positionen for en kamp eller fangstgruppe. |
MSFT.REGEXP_SUBSTR |
Returner teksten fra en kamp- eller fangstgruppe. |
MSFT.REGEXP_REPLACE |
Erstat matchende tekst. |
MSFT.REGEXP_LIKE
Returneres TRUE , når mønsteret matcher en hvilken som helst del af kildestrengen. Hvis der ikke findes et match, returnerer FALSEden .
| Argumenter | Syntaks |
|---|---|
| 2 | MSFT.REGEXP_LIKE(source, pattern) |
| 3 | MSFT.REGEXP_LIKE(source, pattern, flags) |
source er strengen, der skal søges.
pattern matches mod enhver delstreng af source , medmindre udtrykket selv bruger ankre som ^ eller $.
flags ændrer matchningsadfærd som beskrevet i Matching-regler og -muligheder.
RETURN MSFT.REGEXP_LIKE('HELLO', 'hello', 'i') AS matches
Resultatet er TRUE.
MSFT.REGEXP_COUNT
Returnerer antallet af matches. Hvis der ikke findes et match, 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, der skal søges i, og pattern identificerer de matches, der skal tælles.
start er den nul-baserede Unicode-kodepunktposition, hvor matching kan begynde. En kamp skal starte ved eller efter denne position. Positionen bliver ikke en ny begyndelse for forankrede mønstre.
flags ændrer matchningsadfærd som beskrevet i Matching-regler og -muligheder.
RETURN MSFT.REGEXP_COUNT('1a2a3a4', '[0-9]', 3) AS match_count
Søgningen starter på position 3, den anden a, så kun cifrene 3 og 4 tælles. Resultatet er 2.
MSFT.REGEXP_INSTR
Returnerer den nul-baserede position for en valgt match- 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, der skal søges i, og pattern identificerer matchene.
start er den nul-baserede Unicode-kodepunktposition, hvor matching kan begynde. En kamp skal starte ved eller efter denne position, hvilket ikke bliver en ny begyndelse for strengen for forankrede mønstre.
occurrence vælger det første, andet eller efterfølgende ikke-overlappende match fundet fra start.
group Vælger hvad der skal placeres i det match: 0 Vælger det komplette match, og en positiv værdi vælger den nummererede capture-gruppe.
return_option bestemmer hvilken grænse for den valgte kamp eller gruppe, der returneres: 0 returnerer sin startposition og 1 returnerer positionen umiddelbart efter afslutningen.
flags ændrer matchningsadfærd som beskrevet i Matching-regler og -muligheder.
Hvis der ikke findes nogen matchende forekomst, eller den valgte capture-gruppe ikke deltager i den forekomst, returnerer -1funktionen .
RETURN MSFT.REGEXP_INSTR('banana', 'a', 0, 2) AS match_position
Det andet match starter på position 3, så resultatet er 3.
MSFT.REGEXP_SUBSTR
Returnerer teksten fra en udvalgt 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, der skal søges i, og pattern identificerer matchene.
start er den nul-baserede Unicode-kodepunktposition, hvor matching kan begynde. En kamp skal starte ved eller efter denne position, hvilket ikke bliver en ny begyndelse for strengen for forankrede mønstre.
occurrence vælger det første, andet eller efterfølgende ikke-overlappende match fundet fra start.
group Vælger teksten, der skal returneres fra det match: 0 vælger det komplette match, og en positiv værdi vælger den nummererede capture-gruppe.
flags ændrer matchningsadfærd som beskrevet i Matching-regler og -muligheder.
Hvis der ikke findes nogen matchende forekomst, eller den valgte capture-gruppe ikke deltager i den forekomst, returnerer funktionen null.
RETURN MSFT.REGEXP_SUBSTR(
'12-345',
'([0-9]+)-([0-9]+)',
0,
1,
'',
2
) AS matched_text
Den første forekomst er den komplette streng, og fangstgruppen 2 er 345, så resultatet er 345.
MSFT.REGEXP_REPLACE
Erstatter matchende tekst. Som standard erstatter den hvert match og indsætter erstatningsteksten bogstaveligt 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, der skal ændres, og pattern identificerer matchene.
replacement er teksten indsat for et valgt match.
EXACT indsætter det bogstaveligt; TEMPLATE fortolker capture-referencer.
start er den nul-baserede Unicode-kodepunktposition, hvor udskiftning kan begynde. En kamp skal starte ved eller efter denne position. Teksten før start bevares uændret, og positionen bliver ikke en ny begyndelse for strengen for forankrede mønstre. Sæt occurrence til 0 at erstatte hvert match fra start, eller til en positiv værdi for kun at erstatte det nummererede ikke-overlappende match. Tidligere matches forbliver start uændrede, når en specifik hændelse vælges.
flags ændrer matchningsadfærd som beskrevet i Matching-regler og -muligheder.
RETURN MSFT.REGEXP_REPLACE('a1b2c3', '[0-9]', '#', 0, 2) AS replaced
Kun det andet cifret match erstattes, så resultatet er a1b#c3.
Hvis der ikke findes et match, returneres kildestrengen uændret.
For at genbruge matchet tekst i erstatningen, angiv TEMPLATE. I denne tilstand \0 refererer det til \9 de komplette kamp- og fangstgrupper, og \\ indsætter en bogstavelig bagskrå. Brug et råt streng-literal, præfikseret med @, for at sende disse referencer uden yderligere undslip:
RETURN MSFT.REGEXP_REPLACE(
'John Smith',
@'([A-Za-z]+) ([A-Za-z]+)',
TEMPLATE @'\2 \1'
) AS reordered_name
Resultatet er Smith John.
Matchningsregler og muligheder
Mønstre bruger RE2 regulær udtrykssyntaks og matcher Unicode-strenge. Kilden kan være enhver strengudtryk. Mønsteret, flagene og erstatningen skal være strengliteraler, og numeriske muligheder skal være usignerede heltalsliteraler.
Matches findes fra venstre mod højre uden overlapp. Efter en nul-længde match avanceres matchningen med ét Unicode-kodepunkt.
Startpositioner og returnerede positioner er nul-baserede Unicode-kodepunkt-offsets. Forekomstnumre er one-baserede, bortset fra at forekomst 0 betyder at erstatte alle forekomster i MSFT.REGEXP_REPLACE.
Følgende tabel viser standardindstillingerne for udeladte valgfrie argumenter:
| Function | Defaults |
|---|---|
MSFT.REGEXP_LIKE |
Flagene er tomme. |
MSFT.REGEXP_COUNT |
Start er 0; flagene er tomme. |
MSFT.REGEXP_INSTR |
Start er 0; forekomst er 1; returnér-muligheden er 0; flagene er tomme; gruppen er 0. |
MSFT.REGEXP_SUBSTR |
Start er 0; forekomst er 1; flag er tomme; gruppen er 0. |
MSFT.REGEXP_REPLACE |
Tilstand er EXACT; start er 0; forekomst er 0; flagene er tomme. |
De valgfrie flag er:
| Flag | Adfærd |
|---|---|
i |
Match uden hensyn til sag. |
m |
Lav ^ og $ match begyndelsen og slutningen af hver linje. |
s |
Match . linjeskiftetegn. |
Kombiner flag i én streng, såsom 'ims'. En null-kilde returnerer null. Et ikke-understøttet flag, ugyldigt regulært udtryk, ugyldig returmulighed eller ugyldigt forekomst- eller gruppenummer returnerer en fejl.
Graf funktioner
-
nodes(path)– returnerer noder fra en stiværdi. -
edges(path)- returnerer kanter fra en stiværdi. -
elements(path)– returnerer alle noder og kanter fra en sti som en enkelt liste i stirækkefølgen. -
labels(node_or_edge)– returnerer mærkaterne for en node eller kant som en liste over strenge. -
path_length(path)- returnerer antallet af kanter i en sti. -
element_id(node_or_edge)- returnerer node- eller kantidentifikatoren som en uigennemsigtig streng.
ELEMENT_ID accepterer en node- eller kantreference og returnerer null for et nullinput.
Behandl den returnerede streng som uigennemsigtig.
Eksempel:
MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues, path_length(p) AS hops
Listefunktioner
-
size(list)– returnerer størrelsen på en listeværdi. -
trim(list,n)- trimmer en liste til højstnelementer.
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
Tidsmæssige funktioner
-
CURRENT_TIMESTAMP– returnerer den aktuelle zoned datetime. -
ZONED_DATETIME(string)- returnerer den zonede dato-tid repræsenteret ved en ISO 8601-streng. -
DURATION(string)- returnerer dagtidsvarigheden repræsenteret ved en ISO 8601-varighedsstreng.
Eksempel:
RETURN CURRENT_TIMESTAMP AS now,
DURATION('PT2H') AS twoHours
Brug subtraktionsoperatoren til at udlede en varighed mellem to zonede datotidspunkter:
RETURN ZONED_DATETIME('2026-09-17T12:00:00Z')
- ZONED_DATETIME('2026-09-17T10:00:00Z') AS elapsed
Vigtigt!
Grafen understøtter dagtidsvarigheder, men ikke år-måned-varigheder.
DURATION_BETWEEN(start, end) er ikke understøttet i øjeblikket; træk i stedet de to zonerede dato-tid-værdier fra.
Generiske funktioner
-
coalesce(value1, value2, ...)– returnerer den første værdi, der ikke er null. -
to_json_string(value)– konverterer en værdi til dens JSON-strengrepræsentation.
Eksempel:
MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name,
to_json_string(p) AS person_json