Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel enthält eine umfassende Referenz zu GQL-Ausdrücken, Prädikaten und integrierten Funktionen, die in Graph in Microsoft Fabric-Abfragen verfügbar sind. Verwenden Sie diesen Verweis, um zu verstehen, wie Berechnungen ausgeführt, Ergebnisse gefiltert und Daten in Ihren Diagrammabfragen transformiert werden.
Eine Übersicht über die GQL-Abfragesprache und End-to-End-Abfragebeispiele finden Sie im GQL-Sprachhandbuch. Informationen zu unterstützten Datentypen und Literalsyntax finden Sie unter GQL-Werte und -Werttypen.
Literale
Literale sind einfache Ausdrücke, die direkt auf den angegebenen Wert ausgewertet werden. Im Artikel zu GQL-Werten und -Werttypen werden Literale jeder Art von Wert ausführlich erläutert.
Example:
1
1.0d
1.00m
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL
Ausführliche Literalsyntax für jeden Datentyp finden Sie unter GQL-Werte und Werttypen.
Prädikate
Prädikate sind boolesche Ausdrücke, die Sie häufig zum Filtern von Ergebnissen in GQL-Abfragen verwenden. Sie werden als TRUE, FALSEoder UNKNOWN (NULL) ausgewertet.
Vorsicht
Wenn Sie Prädikate als Filter verwenden, behalten sie nur die Elemente bei, für die das Prädikat ausgewertet wird TRUE.
Vergleichsdrädikate
Verwenden Sie diese Operatoren, um Werte zu vergleichen:
-
=(gleich) -
<>(nicht gleich) -
<(kleiner als) -
>(größer als) -
<=(kleiner oder gleich) -
>=(größer oder gleich)
GQL verwendet dreiwertige Logik, bei der Vergleiche mit NULL-Rückgabe UNKNOWN:
| Ausdruck | Ergebnis |
|---|---|
5 = 5 |
TRUE |
5 = 3 |
FALSE |
5 = NULL |
UNKNOWN |
NULL = NULL |
UNKNOWN |
Spezifisches Vergleichsverhalten finden Sie in der Dokumentation für jeden Werttyp in GQL-Werten und -Werttypen.
Example:
MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName
Wenn beide Operanden Zahlen sind, vergleicht GQL sie anhand ihrer numerischen Werte.
Important
Graph unterstützt noch nicht jeden numerischen Vergleich, den GQL definiert. Das aktuelle Verhalten verwendet folgende Regeln:
- Ein Vergleich zwischen einer ganzen Zahl und einer approximativen Zahl wandelt die ganze Zahl in einen approximativen numerischen Typ um.
- Ein Vergleich zwischen unterzeichneten und unsignierten ganzzahligen Werten wandelt in der Regel beide Werte in einen vorzeichenmäßigen ganzzahligen Typ um. Ein unsignierter Wert außerhalb des vorzeichenmäßigen ganzzahligen Bereichs verursacht einen Fehler.
Logische Ausdrücke
Kombinieren von Bedingungen mit logischen Operatoren:
-
AND(beide Bedingungen wahr) -
OR(beide Bedingung true) -
NOT(Negates-Bedingung) -
XOR(exklusive Disjunktion - wahr, wenn genau ein Operand wahr ist)
Example:
MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName
Eigenschaftenexistenz-Prädikate
Verwenden Sie die folgenden Prädikate, um zu überprüfen, ob Eigenschaften vorhanden sind:
p.locationIP IS NOT NULL
p.browserUsed IS NULL
Hinweis
Der Versuch, auf eine bekannte, nicht existierende Eigenschaft zuzugreifen, führt zu einem Syntaxfehler.
Der Zugang zu einer potenziell nicht vorhandenen Immobilie bewertet auf null.
Die Bestimmung, ob eine Eigenschaft bekannt oder potenziell nicht vorhanden ist, basiert auf dem Typ des Zugriffsknotens oder -edges.
Existenz-Subqueries
Verwenden Sie eine Prozedurenform-Unterabfrage EXISTS , um zu testen, ob eine verschachtelte Abfrage mindestens eine Zeile zurückgibt:
EXISTS {
<query statements>
RETURN <columns>
}
Das Ergebnis ist ein nicht-nuller Boolescher Wert:
-
TRUEwenn die Unterabfrage eine oder mehrere Zeilen zurückgibt. -
FALSEwenn die Unteranfrage keine Zeilen zurückgibt.
Variablen, die bereits im Geltungsbereich liegen, sind implizit innerhalb der Unterabfrage verfügbar. Variablen, die nur innerhalb der Unterabfrage eingeführt werden, sind außerhalb dieser nicht verfügbar.
Verwendung EXISTS in einem Filter:
MATCH (p:Person)
WHERE EXISTS {
MATCH (p)-[:knows]->(friend:Person)
RETURN friend
}
RETURN p.firstName, p.lastName
Verwenden Sie NOT EXISTS , um Zeilen zu behalten, für die die Unterabfrage keine Zeilen zurückgibt. Du kannst auch EXISTS in LET, RETURN, ORDER BY, verwenden und Filter- oder Quellausdrücke aggregieren.
EXISTS wird in einem Listenprädikatenfilter nicht unterstützt.
Important
Graph-Pattern-only-Formulare wie EXISTS { (p)-[:knows]->(friend) } und EXISTS ((p)-[:knows]->(friend)) werden nicht unterstützt. Verwenden Sie das in den vorherigen Beispielen gezeigte Verfahrensformular. Skalare VALUE { ... } Subqueries werden nicht unterstützt.
Vorsicht
EXISTS Prüft, ob die Unterabfrage eine Zeile zurückgibt, nicht ob ein aggregierter Wert nicht null ist. Ein ungruppiertes Aggregat wie RETURN count(*) wie gibt eine Zeile zurück, selbst wenn MATCH keine Zeilen gefunden werden, sodass diese Form von EXISTS zu auswertet.TRUE Gib eine abgestimmte Variable zurück, wenn du testen willst, ob es Übereinstimmungen gibt.
Weitere Informationen zu korrelierten Unteranfragen finden Sie in der CALL Aussage im GQL-Sprachleitfaden.
Mitgliedschafts-Prädikate auflisten
Testen, ob Werte in Listen enthalten sind:
p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']
Prädikatenfunktionen listen
Verwenden Sie eine Listenprädikatenfunktion, um einen booleschen Ausdruck für die Elemente einer Liste auszuwerten:
ALL(element IN list WHERE predicate)
ANY(element IN list WHERE predicate)
NONE(element IN list WHERE predicate)
SINGLE(element IN list WHERE predicate)
Die Quelle kann ein Listenliteral, eine listenwertige Eigenschaft, eine Variable oder eine Gruppenliste aus einem variablen Längenmuster sein.
Die Funktionen haben folgende Bedeutungen:
| Funktion | Bedeutung |
|---|---|
ALL |
Jedes Element erfüllt das Prädikat. |
ANY |
Mindestens ein Element erfüllt das Prädikat. |
NONE |
Kein Element erfüllt das Prädikat. |
SINGLE |
Genau ein Element erfüllt das Prädikat. |
Das folgende Beispiel bewertet alle vier Funktionen über eine dynamisch konstruierte 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 vier zurückgegebenen Werte sind TRUE.
Man kann auch Eigenschaften von Elementen aus einer Liste bewerten. In diesem Beispiel ist die Gruppenliste, connections die durch das Kantenmuster mit variabler Länge erzeugt wird:
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
Listenprädikate verwenden die dreiwertige Logik. Die Tabelle beschreibt das Ergebnis anhand der durch den Filterausdruck für die Listenelemente erzeugten Werte:
| Funktion | TRUE |
FALSE |
UNKNOWN |
Leere Liste |
|---|---|---|---|---|
ALL |
Jedes Filterergebnis ist TRUE. |
Mindestens ein Ergebnis ist FALSE. |
Kein Ergebnis ist FALSE, und mindestens eines ist UNKNOWN. |
TRUE |
ANY |
Mindestens ein Filterergebnis ist TRUE. |
Kein Ergebnis ist TRUE oder UNKNOWN. |
Kein Ergebnis ist TRUE, und mindestens eines ist UNKNOWN. |
FALSE |
NONE |
Kein Ergebnis ist TRUE oder UNKNOWN. |
Mindestens ein Ergebnis ist TRUE. |
Kein Ergebnis ist TRUE, und mindestens eines ist UNKNOWN. |
TRUE |
SINGLE |
Genau ein Ergebnis ist TRUE, und keines ist UNKNOWN. |
Mehr als ein Ergebnis ist TRUE, oder kein Ergebnis ist TRUE oder UNKNOWN. |
Höchstens ein Ergebnis ist TRUE, und mindestens eines ist UNKNOWN. |
FALSE |
Ist die Quellliste null, gibt jede Funktion . zurück.UNKNOWN Ein Nulllisten-Element trägt das Ergebnis bei, indem der Filter mit diesem Element an null gebunden ist; es macht das Funktionsergebnis nicht automatisch unbekannt.
Die Elementvariable ist nur innerhalb des Filterausdrucks des Listenprädikats verfügbar. Der Filter kann auch Variablen aus der umschließenden Abfrage referenzieren. Wenn die Elementvariable denselben Namen wie eine äußere Variable hat, hat die lokale Elementvariable Vorrang. Verschachtelte Listenprädikate können ähnlich eine äußere Elementvariable überschatten.
Aggregierte Funktionen können auf eine umschließende Gruppenliste verweisen, aber sie können die lokal gebundene Elementvariable nicht aggregieren.
EXISTS Unterabfragen werden auch nicht in einem Listenprädikatenfilter unterstützt.
ANY(...) ist eine Listenprädikatfunktion. Verwechsle es nicht mit dem ANY SHORTEST Pfadsuch-Präfix oder dem dynamischen ANY Werttyp.
Zeichenfolgenmuster-Prädikate
Zeichenfolgen mithilfe von Musterabgleichstechniken abgleichen:
p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'
Für das RE2-Regulär-Ausdrucks-Matching verwenden MSFT.REGEXP_LIKESie .
Arithmetische Ausdrücke
Verwenden Sie standardmäßige arithmetische Operatoren mit numerischen Werten:
-
+(Addition) -
-(Subtraktion) -
*(Multiplikation) -
/(Division)
Arithmetische Operatoren folgen allgemeinen mathematischen Konventionen.
Vorrang:
Im Allgemeinen folgen Operatoren etablierten Operatorrangfolgeregeln, z * . B. vor +. Verwenden Sie Klammern, um die Auswertungsreihenfolge nach Bedarf zu steuern.
Example:
(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'
Koersionsregeln:
Verwenden Sie die folgenden Regeln in der Reihenfolge der Rangfolge:
- Arithmetische Ausdrücke, die einen approximativen numerischen Typ enthalten, liefern einen approximativen numerischen Typ.
- Arithmetische Ausdrücke, die sowohl signierte als auch unsignierte ganzzahlige Typen enthalten, geben einen vorzeichenmäßigen ganzzahligen Typ zurück.
Eigenschaftenzugriff
Zugreifen auf Eigenschaften mithilfe der Punktnotation:
p.firstName
edge.creationDate
Listenzugriff
Zugreifen auf Listenelemente mithilfe der nullbasierten Indizierung:
interests[0] -- first element
interests[1] -- second element
Integrierte Funktionen
GQL unterstützt verschiedene integrierte Funktionen für die Datenverarbeitung und -analyse.
Numerische Funktionen
Verwenden Sie numerische Funktionen, um numerische Werte zu transformieren, trigonometrische Werte zu berechnen und ganzzahlige Bereiche zu erstellen.
Absoluter Wert und Macht
| Funktion | Description |
|---|---|
ABS(value) |
Gibt den Absolutwert zurück. Das Ergebnis hat denselben numerischen Typ wie value. |
POWER(base, exponent) |
Erhöht base zu exponent und gibt ein DOUBLEzurück. |
Beide Funktionen akzeptieren numerische Werte. Ein Nullargument erzeugt null. Eine ungültige numerische Operation, wie ein überlaufendes POWER Ergebnis, erzeugt einen Fehler.
RETURN ABS(-1) AS absoluteValue, POWER(2, -2) AS reciprocalSquare
Das Ergebnis ist:
| absoluteWert | reciprocalSquare |
|---|---|
1 |
0.25 |
Trigonometrische Funktionen
Die trigonometrischen Funktionen akzeptieren einen numerischen Wert und geben einen DOUBLEzurück.
Ein Nullargument erzeugt null.
| Funktion | Description |
|---|---|
SIN(value), COS(value), TAN(value), COT(value) |
Berechnen Sie eine trigonometrische Funktion.
value ein Winkel in Radianten ist. |
ASIN(value), ACOS(value), ATAN(value) |
Berechnen Sie eine inverse trigonometrische Funktion. Das Ergebnis liegt in Radialen.
ASIN und ACOS erfordern einen Wert von -1 durch 1. |
SINH(value), COSH(value), TANH(value) |
Berechnen Sie eine hyperbolische Funktion. |
DEGREES(value) |
Wandelt einen Winkel von Radianten in Grad um. |
RADIANS(value) |
Wandelt einen Winkel von Grad in Radianten um. |
Ein Argument außerhalb des mathematischen Bereichs einer Funktion erzeugt einen Fehler.
RETURN COS(0) AS cosine, RADIANS(180) AS angle
Das Ergebnis ist:
| Kosinus | Winkel |
|---|---|
1.0 |
3.141592653589793238462643383279502884 |
Ganzzahlige Bereiche
RANGE(start, end) gibt eine Liste von ganzen Zahlen von start nach endzurück, wobei ein Schritt von verwendet wird 1.
RANGE(start, end, step) verwendet den angegebenen von null verschiedenen Schritt.
start, end, und step müssen nicht-null ganze Zahlen sein. Null ist gültig für start oder end; nur step muss nicht null sein.
Der Bereich umfasst start. Es gilt end nur, wenn das wiederholte Hinzufügen step genau reicht end . Ein positiver Schritt mit start größer als end, oder ein negativer Schritt mit start weniger als end, liefert eine leere Liste. Ein Nullschritt erzeugt einen Fehler.
RETURN RANGE(0, 10, 3) AS ascending, RANGE(5, 0, -2) AS descending
Das Ergebnis ist:
| aufsteigend | absteigend |
|---|---|
[0, 3, 6, 9] |
[5, 3, 1] |
Wenn alle Argumente unsignierte ganze Zahlen sind, RANGE liefert ein LIST<UINT64>.
Andernfalls gibt er a LIST<INT64> zurück und lehnt Werte ab, die nicht sicher als vorzeichenbetecknte Zahlen dargestellt werden können.
Aggregatfunktionen
Aggregierte Funktionen kombinieren Werte entweder über Eingabezeilen hinweg oder innerhalb einer Gruppenliste, die durch ein Muster variabler Länge begrenzt ist.
| Funktion | Description |
|---|---|
COUNT(*) |
Zählt Eingabezeilen, einschließlich Zeilen, die Nullwerte enthalten. |
COUNT(expression) |
Zählt nicht-null Ergebnisse von expression. |
SUM(expression) |
Gibt die Summe der nicht-nullen numerischen Werte zurück. |
AVG(expression) |
Gibt den Mittelwert der nicht-nullen numerischen Werte zurück. |
MIN(expression) |
Gibt den minimalen nicht-nullen Wert zurück. |
MAX(expression) |
Gibt den maximalen nicht-nullen Wert zurück. |
COLLECT_LIST(expression) |
Gibt eine Liste mit einem Element für jede Eingabe zurück, einschließlich Nullelemente. |
COLLECT_ONE(expression) |
Gibt einen nicht-nullen Eingabewert zurück. Der ausgewählte Wert ist nicht deterministisch. |
COLLECT_ELEMENTS(expression) |
Verkettet die Elemente listenwertiger Eingaben zu einer Liste. Null-Eingabelisten tragen keine Elemente bei, aber Null-Elemente innerhalb einer Liste bleiben im Ergebnis erhalten. |
Wenn eine aggregierte Abfrage keine Gruppierungsspalten hat und keine Eingabezeilen erhält, COUNT gibt 0sie , COLLECT_LIST und COLLECT_ELEMENTS eine leere Liste zurück, während die anderen aggregierten Funktionen null zurückgeben. Verlasse dich nicht auf die Reihenfolge der von einem Sammlungsaggregat zurückgegebenen Werte. Bei Gruppierungsspalten erzeugen keine Eingabezeilen eine Gruppe und somit keine Ergebniszeile.
Mengenquantoren
Verwenden ALL Sie es, um doppelte Werte einzufügen oder DISTINCT zu entfernen.
ALL ist der Standard für Ausdrucksaggregate.
COUNT(*) akzeptiert keinen Mengenquantor.
MATCH (person:Person)
RETURN COUNT(person) AS personCount,
COUNT(DISTINCT person.browserUsed) AS browserCount
Für COLLECT_LISTentfernt sie DISTINCT doppelte Werte und behält höchstens einen Null. Für COLLECT_ELEMENTSgilt gilt DISTINCT für die Elemente, nachdem die Eingabelisten verkettet wurden.
DISTINCT Das macht COLLECT_ONE deterministisch nicht.
Aggregate-spezifische Filter und Grenzwerte
Addiere FILTER (WHERE predicate) nach einem Aggregat nur Werte ein, für die wahr predicate ist. Falsche und unbekannte Prädikatenergebnisse werden ausgeschlossen.
Dieser Filter beeinflusst nur diese Aggregate, nicht die Eingabezeilen, die anderen Ausdrücken im selben RETURNFormat zur Verfügung stehen.
Füge im Aggregatfilter ein LIMIT n , um höchstens n qualifizierte Eingabezeilen zu berücksichtigen. Das Filtern erfolgt vor dem aggregatspezifischen Grenzwert und DISTINCT wird nach dem Limit angewendet.
MATCH (person:Person)
RETURN COUNT(*) AS allPeople,
COUNT(*) FILTER (WHERE person.birthday < 19900101 LIMIT 5) AS sampleBornBefore1990
Aggregation über Reihen hinweg
Ein Aggregat kombiniert normalerweise Werte vertikal über Eingabezeilen hinweg. Verwenden Sie GROUP BY , um für jede Gruppe ein Ergebnis zu berechnen.
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
Platziere kein vertikales Aggregat direkt in ein anderes im selben Abfrageblock. Ist beispielsweise SUM(COUNT(*)) ungültig. Nutzen Sie NEXT sie, um die Aggregationsschritte zu trennen, wenn Sie ein aggregiertes Ergebnis aggregieren müssen.
Aggregation innerhalb eines abgestimmten Pfades
Eine Kantenvariable, die durch ein variable-längen-Muster begrenzt ist, wird zu einer Gruppenliste. Ein Aggregat über dieser Variablen ist horizontal: Es berechnet ein Ergebnis innerhalb der Liste für jeden abgestimmten Pfad, anstatt verschiedene Eingabezeilen zu kombinieren.
MATCH (person:Person)-[knows:knows]->{1,5}(friend:Person)
RETURN COUNT(knows) AS pathLength
Hier gibt COUNT(knows) die Anzahl der Kanten in jedem abgestimmten Pfad zurück. Die horizontalen Formen von COUNT, SUM, AVG, MIN, MAX, COLLECT_LIST, COLLECT_ONE, und COLLECT_ELEMENTS werden unterstützt.
COUNT(*) und Aggregat-spezifisch FILTER oder LIMIT keine horizontalen Formen.
Ein horizontales Aggregat kann die Eingabe eines äußeren vertikalen Aggregats sein:
MATCH (person:Person)-[knows:knows]->{1,5}(friend:Person)
RETURN MIN(COUNT(knows)) AS shortestMatchedPath
In dieser Abfrage COUNT(knows) berechnet eine Länge pro abgestimmtem Pfad und MIN kombiniert diese Längen über die Eingabezeilen.
Für aufgabenorientierte Beispiele siehe Filter- und aggregierende Graphdaten.
Bedingte Ausdrücke
Verwenden Sie einen einfachen CASE Ausdruck, um einen Ausdruck mit einem oder mehreren Werten zu vergleichen, und geben Sie das Ergebnis zurück, das mit dem ersten gleichen Wert verbunden ist:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
NULLIF:
NULLIF(a, b) gibt NULL zurück, wenn a gleich b, andernfalls wird zurückgegeben a.
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
Gesuchte CASE WHEN <predicate> Ausdrücke werden nicht unterstützt. Um Zeilen nach Prädikaten zu routen und eine Abfrageanweisung oder ein verschachteltes Verfahren für den ausgewählten Sprung auszuführen, verwenden Sie eine WHEN bedingte Anweisung.
Zeichenfolgenfunktionen
Verwenden Sie Zeichenkettenfunktionen, um Zeichenketten zu messen, zu transformieren, zu suchen, zu vergleichen und zu kombinieren.
Zeichenlänge und Fall
Verwenden Sie diese Funktionen, um Zeichenketten zu messen oder zu ändern:
| Funktion | Description |
|---|---|
CHAR_LENGTH(string) |
Gibt die Anzahl der Zeichen zurück. |
UPPER(string) |
Verwendet Unicode-Großbuchstaben-Mapping. |
LOWER(string) |
Verwendet Unicode-Kleinbuchstaben-Mapping. |
CASEFOLD(string) |
Wendet lokalunabhängiges Unicode-Fallfalten für caselose Matching an. |
Unicode-Abbildungen können die Länge oder Darstellung einer Zeichenkette verändern:
RETURN UPPER('straße') AS uppercase,
LOWER('İ') AS lowercase,
CASEFOLD('Straße') AS folded
Die Ergebnisse sind STRASSE, i̇, und strasse, jeweils.
CASEFOLD ist nicht gleichbedeutend mit LOWER. Zum Beispiel bildet ß Fallfaltung auf ss und bildet die griechischen Sigma-Formen Σ, σ, und ς auf σab.
Zeichenketten normalisieren
GQL definiert vier Unicode-Normierungsformen:
- Normalisierungsform C (
NFC), kanonische Komposition. - Normalisierungsform D (
NFD), kanonische Zerlegung. - Normalisierungsform KC (
NFKC), Kompatibilitätskomposition. - Normalisierungsform KD (
NFKD), Kompatibilitätsdekomposition.
NORMALIZE(string) standardmäßig auf NFC zurück. Spezifiziere eine Normalisierungsform als zweites Argument:
RETURN NORMALIZE('cafe\u0301') AS composed,
NORMALIZE('café', NFD) AS decomposed
Das Argument muss ein String sein.
Important
Graph unterstützt derzeit NFC und NFD. Die Angabe von NFKC oder NFKD erzeugt einen Fehler.
Trimmsaiten
Verwenden TRIM Sie, um Leerzeichen oder ein bestimmtes Zeichen von beiden Enden, dem Anfang oder dem Ende einer Zeichenkette zu entfernen:
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
Der benutzerdefinierte Trim-Wert muss genau ein Byte betragen. Multibyte-Unicode-Zeichen und -Zeichenketten, die mehrere Zeichen enthalten, werden nicht als benutzerdefinierte Trim-Werte unterstützt. Eine Nullquelle oder ein benutzerdefinierter Trimmwert gibt null zurück.
Strings verbinden
STRING_JOIN(list [, delimiter]) fügt sich einer Liste von Strings hinzu. Der Standardtrenner ist ein Komma gefolgt von einem Leerzeichen:
RETURN STRING_JOIN(['foo', 'bar', 'baz']) AS default_delimiter,
STRING_JOIN(['foo', 'bar', 'baz'], '-') AS custom_delimiter
Die Ergebnisse sind foo, bar, baz und foo-bar-baz. Eine leere Liste gibt eine leere Zeichenkette zurück. Eine Nullliste, ein Null-Trennzeichen oder ein Null-Listen-Element gibt Null zurück. Jedes nicht-nulllisten-Element muss eine Zeichenkette sein.
Funktionen für reguläre Ausdrücke
Graph stellt diese regulären Ausdrucksfunktionen als Erweiterungen zu GQL bereit:
| Funktion | Verwendung |
|---|---|
MSFT.REGEXP_LIKE |
Testen Sie, ob der Text eine Übereinstimmung enthält. |
MSFT.REGEXP_COUNT |
Zähle stimmt überein. |
MSFT.REGEXP_INSTR |
Finde die Position einer Kampf- oder Fanggruppe. |
MSFT.REGEXP_SUBSTR |
Gib den Text einer Match- oder Capture-Gruppe zurück. |
MSFT.REGEXP_REPLACE |
Ersetzen Sie den passenden Text. |
MSFT.REGEXP_LIKE
Wird zurückgegeben TRUE , wenn das Muster mit einem Teil der Quellzeichenkette übereinstimmt. Sollte keine Übereinstimmung gefunden werden, wird FALSE zurückgegeben.
| Argumente | Syntax |
|---|---|
| 2 | MSFT.REGEXP_LIKE(source, pattern) |
| 3 | MSFT.REGEXP_LIKE(source, pattern, flags) |
source ist der String, den es zu durchsuchen gilt.
pattern wird mit jeder Teilzeichenkette von source abgeglichen, es sei denn, der Ausdruck selbst verwendet Anker wie ^ oder $.
flags verändert das Matching-Verhalten, wie in Matching-Regeln und -Optionen beschrieben.
RETURN MSFT.REGEXP_LIKE('HELLO', 'hello', 'i') AS matches
Das Ergebnis ist TRUE.
MSFT.REGEXP_COUNT
Gibt die Anzahl der Übereinstimmungen zurück. Sollte keine Übereinstimmung gefunden werden, wird 0 zurückgegeben.
| Argumente | Syntax |
|---|---|
| 2 | MSFT.REGEXP_COUNT(source, pattern) |
| 3 | MSFT.REGEXP_COUNT(source, pattern, start) |
| 4 | MSFT.REGEXP_COUNT(source, pattern, start, flags) |
source ist der zu suchende String und pattern identifiziert die zu zählen Übereinstimmungen.
start ist die nullbasierte Unicode-Codepunktposition, an der das Matching beginnen kann. Ein Match muss an oder nach dieser Position beginnen. Die Position wird kein Neuanfang für verankerte Muster.
flags verändert das Matching-Verhalten, wie in Matching-Regeln und -Optionen beschrieben.
RETURN MSFT.REGEXP_COUNT('1a2a3a4', '[0-9]', 3) AS match_count
Die Suche beginnt an Position 3, der zweiten a, sodass nur die Ziffern 3 und 4 gezählt werden. Das Ergebnis ist 2.
MSFT.REGEXP_INSTR
Gibt die nullbasierte Position einer ausgewählten Match- oder Capture-Gruppe zurück.
| Argumente | 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 ist die zu suchende Zeichenkette und pattern identifiziert die Übereinstimmungen.
start ist die nullbasierte Unicode-Codepunktposition, an der das Matching beginnen kann. Ein Match muss an oder nach dieser Position beginnen, was kein Neuanfang der Reihe für verankerte Muster ist.
occurrence wählt das erste, zweite oder nachfolgende nicht überlappende Match, das aus gefunden wird start.
group Wählt aus, was in diesem Match gefunden werden soll: 0 Wählt das vollständige Match, und ein positiver Wert wählt die nummerierte Capture-Gruppe aus.
return_option bestimmt, welche Grenze des ausgewählten Spiels oder der Gruppe zurückgegeben wird: 0 gibt seine Startposition zurück und 1 die Position unmittelbar nach dem Ende.
flags verändert das Matching-Verhalten, wie in Matching-Regeln und -Optionen beschrieben.
Wenn kein übereinstimmendes Vorkommen gefunden wird oder die ausgewählte Capture-Gruppe nicht an diesem Vorkommen teilnimmt, gibt die Funktion . zurück.-1
RETURN MSFT.REGEXP_INSTR('banana', 'a', 0, 2) AS match_position
Das zweite Match beginnt an Position 3, also ist 3das Ergebnis .
MSFT.REGEXP_SUBSTR
Gibt den Text einer ausgewählten Match- oder Capture-Gruppe zurück.
| Argumente | 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 ist die zu suchende Zeichenkette und pattern identifiziert die Übereinstimmungen.
start ist die nullbasierte Unicode-Codepunktposition, an der das Matching beginnen kann. Ein Match muss an oder nach dieser Position beginnen, was kein Neuanfang der Reihe für verankerte Muster ist.
occurrence wählt das erste, zweite oder nachfolgende nicht überlappende Match, das aus gefunden wird start.
group wählt den Text aus, der aus diesem Match zurückkehrt: 0 wählt die vollständige Übereinstimmung aus, und ein positiver Wert wählt diese nummerierte Capture-Gruppe.
flags verändert das Matching-Verhalten, wie in Matching-Regeln und -Optionen beschrieben.
Wenn kein passendes Vorkommen gefunden wird oder die ausgewählte Capture-Gruppe nicht an diesem Vorkommen teilnimmt, gibt die Funktion null zurück.
RETURN MSFT.REGEXP_SUBSTR(
'12-345',
'([0-9]+)-([0-9]+)',
0,
1,
'',
2
) AS matched_text
Das erste Vorkommen ist die vollständige Zeichenkette, und die Fanggruppe 2 ist 345, sodass das Ergebnis ist 345.
MSFT.REGEXP_REPLACE
Ersetzt den übereinstimmenden Text. Standardmäßig ersetzt es jedes Match und fügt den Ersatztext buchstäblich ein.
| Argumente | 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 ist der zu verändernde String und pattern identifiziert die Übereinstimmungen.
replacement ist der für ein ausgewähltes Match eingefügte Text.
EXACT fügt sie wörtlich ein; TEMPLATE interpretiert Capture-Referenzen.
start ist die nullbasierte Unicode-Codepunktposition, an der der Austausch beginnen kann. Ein Match muss an oder nach dieser Position beginnen. Der vorherige start Text bleibt unverändert erhalten, und die Position wird nicht zu einem Neuanfang der Zeichenkette für verankerte Muster. Setze occurrence auf 0 , um jede Übereinstimmung von startzu ersetzen, oder auf einen positiven Wert, um nur diese nummerierte, nicht überlappende Übereinstimmung zu ersetzen. Frühere Übereinstimmungen bleiben unverändert start , wenn ein bestimmtes Ereignis ausgewählt wird.
flags verändert das Matching-Verhalten, wie in Matching-Regeln und -Optionen beschrieben.
RETURN MSFT.REGEXP_REPLACE('a1b2c3', '[0-9]', '#', 0, 2) AS replaced
Nur die zweite Ziffer wird ersetzt, sodass das Ergebnis ist a1b#c3.
Wenn kein Match gefunden wird, wird die Quellzeichenkette unverändert zurückgegeben.
Um abgestimmten Text im Ersatz wiederzuverwenden, geben Sie TEMPLATE. In diesem Modus \0 bezieht sich auf \9 die komplette Match- und Capture-Gruppen und \\ fügt einen wörtlichen Backslash ein. Verwenden Sie ein rohes String-Literal, mit dem Präfix , @um diese Referenzen ohne weiteres Escape zu übergeben:
RETURN MSFT.REGEXP_REPLACE(
'John Smith',
@'([A-Za-z]+) ([A-Za-z]+)',
TEMPLATE @'\2 \1'
) AS reordered_name
Das Ergebnis ist Smith John.
Matching-Regeln und -optionen
Die Muster verwenden die RE2-Syntax des regulären Ausdrucks und passen Unicode-Zeichenketten ab. Die Quelle kann jede beliebige Zeichenkettenausdruck sein. Das Muster, die Flags und der Ersatz müssen String-Literale sein, und numerische Optionen müssen unsignierte Ganzzahl-Literale sein.
Übereinstimmungen werden von links nach rechts gefunden, ohne sich zu überlappen. Nach einem Null-Längen-Matching geht das Matching um einen Unicode-Codepunkt voran.
Startpositionen und zurückgegebene Positionen sind null-basierte Unicode-Codepunkt-Offsets. Vorkommenszahlen sind einsbasiert, außer dass Vorkommen 0 bedeutet, dass jedes Vorkommen in MSFT.REGEXP_REPLACEersetzt wird.
Die folgende Tabelle listet die Standardwerte für ausgelassene optionale Argumente auf:
| Funktion | Standardeinstellungen |
|---|---|
MSFT.REGEXP_LIKE |
Die Flaggen sind leer. |
MSFT.REGEXP_COUNT |
Start ist 0; die Flaggen sind leer. |
MSFT.REGEXP_INSTR |
Start ist 0; Vorkommen ist 1; Rückkehroption ist 0; Flags sind leer; Gruppe ist 0. |
MSFT.REGEXP_SUBSTR |
Start ist 0; Vorkommen ist 1; Flags sind leer; Gruppe ist 0. |
MSFT.REGEXP_REPLACE |
Modus ist EXACT; Start ist 0; Vorkommen ist 0; die Flags sind leer. |
Die optionalen Flaggen sind:
| Flag | Behavior |
|---|---|
i |
Übereinstimmung ohne Rücksicht auf den Fall. |
m |
Erstelle ^ und $ passe den Anfang und das Ende jeder Zeile ab. |
s |
Passen . Sie die Zeilenumschreibungen zusammen. |
Kombinieren Sie Flags in einer Zeichenkette, zum Beispiel .'ims' Eine Nullquelle gibt Null zurück. Ein nicht unterstütztes Flag, ein ungültiger regulärer Ausdruck, eine ungültige Rückgabeoption oder eine ungültige Vorkommens- oder Gruppennummer liefern einen Fehler.
Graph-Funktionen
-
nodes(path)- gibt Knoten aus einem Pfadwert zurück. -
edges(path)- gibt Ränder aus einem Pfadwert zurück. -
elements(path)- gibt alle Knoten und Kanten aus einem Pfad als einzelne Liste in der Pfadreihenfolge zurück. -
labels(node_or_edge)- gibt die Beschriftungen eines Knotens oder Rands als Liste von Zeichenfolgen zurück. -
path_length(path)- gibt die Anzahl der Kanten in einem Pfad zurück. -
element_id(node_or_edge)- gibt die Knoten- oder Kantenkennung als undurchsichtige Zeichenkette zurück.
ELEMENT_ID akzeptiert eine Knoten- oder Kantenreferenz und gibt Null für eine Nulleingabe zurück.
Behandeln Sie die zurückgegebene Saite als undurchsichtig.
Example:
MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues, path_length(p) AS hops
Listenfunktionen
-
size(list)- gibt die Größe eines Listenwerts zurück. -
trim(list,n)- kürzt eine Liste auf die meistennElemente.
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
Zeitliche Funktionen
-
CURRENT_TIMESTAMP- gibt die aktuelle zoned datetime zurück. -
ZONED_DATETIME(string)- gibt das zonierte Datumszeitfenster zurück, das durch eine ISO-8601-Zeichenkette dargestellt wird. -
DURATION(string)- gibt die Tagesdauer zurück, dargestellt durch eine ISO 8601-Dauerzeichenkette.
Example:
RETURN CURRENT_TIMESTAMP AS now,
DURATION('PT2H') AS twoHours
Verwenden Sie den Subtraktionsoperator, um eine Dauer zwischen zwei zonierten Datumszeiten herzuleiten:
RETURN ZONED_DATETIME('2026-09-17T12:00:00Z')
- ZONED_DATETIME('2026-09-17T10:00:00Z') AS elapsed
Important
Die Grafik unterstützt Tageszeiten, aber nicht Jahr-Monat-Dauern.
DURATION_BETWEEN(start, end) derzeit nicht unterstützt wird; ziehe stattdessen die beiden zonierten Datumszeitwerte ab.
Allgemeine Funktionen
-
coalesce(value1, value2, ...)- gibt den ersten Wert ungleich Null zurück. -
to_json_string(value)- konvertiert einen Wert in seine JSON-Zeichenfolgendarstellung.
Example:
MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name,
to_json_string(p) AS person_json