Verwenden Sie reguläre Ausdrucksfunktionen in Fabric Data Warehouse

Gilt für:✅ SQL-Analyseendpunkt und Warehouse in Microsoft Fabric

Reguläre Ausdrucksfunktionen (Regex) ermöglichen es Ihnen, komplexe Textmuster abzugleichen und Stringdaten direkt in Ihren T-SQL-Abfragen zu bearbeiten. Verwenden Sie sie, um Formate zu validieren, Werte aus halbstrukturiertem Text zu extrahieren, Mustervorkommen zu zählen und Daten zu bereinigen oder zu maskieren, ohne sie aus dem Warehouse zu verschieben.

Note

Reguläre Ausdrücke befinden sich derzeit in der Vorschau.

Warehouse und der SQL-Analytics-Endpunkt unterstützen die skalaren regulären Ausdrucksfunktionen. Jede dieser Funktionen gibt pro Eingabezeile einen Wert zurück, sodass Sie sie in der SELECT-Liste, WHERE, JOIN, GROUP BY, ORDER BY und CASE-Ausdruck verwenden können.

Note

Nur skalare Funktionen für reguläre Ausdrücke sind in Warehouse verfügbar. Die tabellenwertigen Funktionen REGEXP_MATCHES und REGEXP_SPLIT_TO_TABLE werden nicht unterstützt.

Unterstützte Funktionen

Function Rückgabetyp Description
REGEXP_LIKE Boolean Gibt an, ob die Texteingabe mit dem Regex-Muster übereinstimmt. Verwenden Sie es als Prädikat, zum Beispiel in einer WHERE Klausel oder einem CASE-Ausdruck.
REGEXP_REPLACE Zeichenfolgenausdruck Gibt die Quellzeichenkette zurück, wobei das Regex-Muster durch eine Ersatzzeichenkette ersetzt wird. Wenn keine Übereinstimmungen gefunden werden, wird die ursprüngliche Zeichenfolge zurückgegeben.
REGEXP_SUBSTR Zeichenfolgenausdruck Gibt das n-teVorkommen einer Unterzeichenkette zurück, die dem Regex-Muster entspricht.
REGEXP_INSTR int Gibt die Start- oder Endposition der übereinstimmenden Teilzeichenkette zurück.
REGEXP_COUNT int Gibt die Anzahl der Male zurück, in denen das Regex-Muster in einer Zeichenkette auftritt.

Syntax

REGEXP_LIKE ( string_expression, pattern_expression [ , flags ] )

REGEXP_REPLACE ( string_expression, pattern_expression [ , string_replacement [ , start [ , occurrence [ , flags ] ] ] ] )

REGEXP_SUBSTR ( string_expression, pattern_expression [ , start [ , occurrence [ , flags [ , group ] ] ] ] )

REGEXP_INSTR ( string_expression, pattern_expression [ , start [ , occurrence [ , return_option [ , flags [ , group ] ] ] ] ] )

REGEXP_COUNT ( string_expression, pattern_expression [ , start [ , flags ] ] )

Eine vollständige Beschreibung jedes Arguments finden Sie in der verknüpften Funktionsreferenz unter Unterstützte Funktionen.

Flags

Das optionale flags Argument ist ein char oder varchar Wert von bis zu 30 Zeichen, das die Abgleichsmodifikatoren festlegt. Wenn du widersprüchliche Flaggen anlieferst, gewinnt die letzte. Zum Beispiel führt 'ic' zu einer Übereinstimmung unter Berücksichtigung der Groß- und Kleinschreibung.

Flag Description
c Zuordnung, bei der die Groß- und Kleinschreibung beachtet wird. Dies ist die Standardoption.
i Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung.
m Mehrzeiliger Modus: ^ und $ entsprechen dem Anfang und dem Ende jeder Zeile sowie dem Anfang und dem Ende des Textes.
s Lass uns . mit dem Zeilenumbruchzeichen \n übereinstimmen.

Considerations

  • Das Argument string_expression akzeptiert Zeichenstring-Typen. Große Werte (varchar(max)) werden bis zu 2 MB unterstützt.
  • Das Argument pattern_expression unterstützt eine maximale Länge von 8.000 Bytes.
  • Reguläre Ausdrucksfunktionen respektieren keine Kollationsregeln. Das Matching kann sich von anderen String-Vergleichen unterscheiden, wie zum Beispiel LIKE. Um die Groß- und Kleinschreibempfindlichkeit zu steuern, verwenden Sie die Flags i und c, anstatt sich auf die Kollation der Spalte zu verlassen. Weitere Informationen finden Sie unter Data Warehouse Kollation.
  • REGEXP_LIKE gibt einen Booleschen Wert zurück und kann nicht direkt als Spalte zurückgegeben werden. Um das Ergebnis als Spalte zurückzugeben, umwickle es in einen CASE Ausdruck.

Examples

Die folgenden Beispiele verwenden einen kleinen Inline-Datensatz, sodass man sie in jedem Warehouse oder SQL-Analytics-Endpunkt ausführen kann.

A. Zeilen filtern, die einem Muster entsprechen

Verwenden REGEXP_LIKE Sie in einer WHERE Klausel, um nur Zeilen mit gültigem E-Mail-Adressformat zurückzugeben.

SELECT CustomerId, Email
FROM (VALUES
        (1, 'anna@contoso.com'),
        (2, 'not-an-email'),
        (3, 'Bob.Smith@Fabrikam.org')
     ) AS c (CustomerId, Email)
WHERE REGEXP_LIKE(Email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$');

Um das Übereinstimmungsergebnis als Spalte zurückzugeben, wickle REGEXP_LIKE in einen CASE-Ausdruck ein:

SELECT Email,
       CASE WHEN REGEXP_LIKE(Email, '@contoso\.com$', 'i') THEN 'Internal' ELSE 'External' END AS EmailType
FROM (VALUES ('anna@CONTOSO.com'), ('bob@fabrikam.org')) AS c (Email);

B. Einen Wert aus Text extrahieren

Verwenden Sie REGEXP_SUBSTR, um die erste Bestellnummer im Format ORD-, gefolgt von Ziffern, aus einem Freitextkommentar zu extrahieren.

SELECT Comment,
       REGEXP_SUBSTR(Comment, 'ORD-\d+') AS OrderNumber
FROM (VALUES
        ('Customer called about ORD-10293 and ORD-10311.'),
        ('No order referenced.')
     ) AS t (Comment);

Um nur einen Teil der Übereinstimmung zu extrahieren, verwendet man eine Capture-Gruppe. Die folgende Abfrage liefert die Domain jeder E-Mail-Adresse:

SELECT REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1) AS EmailDomain
FROM (VALUES ('anna@contoso.com'), ('bob@fabrikam.org')) AS c (Email);

C. Vorkommen des Zählmusters

Zähle REGEXP_COUNT mal, wie viele Zahlen in jeder Zeichenkette vorkommen.

SELECT Comment,
       REGEXP_COUNT(Comment, '\d+') AS NumberCount
FROM (VALUES
        ('Shipped 3 boxes on 12 May, invoice 4471.'),
        ('No numbers here.')
     ) AS t (Comment);

D. Finde die Position eines Treffers

Verwenden Sie REGEXP_INSTR , um die Anfangs- und Endposition der ersten Ziffernfolge zu finden.

SELECT ProductCode,
       REGEXP_INSTR(ProductCode, '\d+')             AS FirstDigitStart,
       REGEXP_INSTR(ProductCode, '\d+', 1, 1, 1)    AS FirstDigitEnd
FROM (VALUES ('BK-R93R-62'), ('HL-U509')) AS p (ProductCode);

E. Bereinigen und maskieren Sie Daten

Verwenden Sie REGEXP_REPLACE, um Telefonnummern mit Capture-Gruppen zu standardisieren und alle bis auf die letzten vier Ziffern zu maskieren.

SELECT Phone,
       REGEXP_REPLACE(Phone, '^(\d{3})-(\d{3})-(\d{4})$', '(\1) \2-\3') AS FormattedPhone,
       REGEXP_REPLACE(Phone, '^\d{3}-\d{3}', '***-***')               AS MaskedPhone
FROM (VALUES ('425-555-0187'), ('206-555-0142')) AS c (Phone);

Die folgende Abfrage fasst wiederholten Leerraum in ein einziges Leerzeichen zusammen:

SELECT REGEXP_REPLACE('Fabric    Data   Warehouse', '\s+', ' ') AS CleanText;

F. Gruppieren und aggregieren durch einen extrahierten Wert

Da die Funktionen skalar sind, kann man sie in GROUP BY Klauseln verwenden. Die folgende Anfrage zählt Kunden pro E-Mail-Domain.

SELECT LOWER(REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1)) AS EmailDomain,
       COUNT(*) AS Customers
FROM (VALUES
        ('anna@contoso.com'),
        ('bob@Contoso.com'),
        ('chris@fabrikam.org')
     ) AS c (Email)
GROUP BY LOWER(REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1));