Mönstermatchning och textextrahering

Slutförd

SQL Server 2025 lägger till nya regexp-funktioner (regular expression) och förbättrar SUBSTRING funktionen för att förenkla arbetet med strukturerad text. Dessa tillägg gör det möjligt för utvecklare att utföra flexibla textsökningar, extrahera komplexa mönster och rensa eller transformera data direkt i T-SQL utan att förlita sig på skript på klientsidan eller CLR-funktioner.

Översikt över funktioner för mönstermatchning och textextrahering

Den nya REGEXP-serien med funktioner stöder regelbunden uttrycksutvärdering direkt i SQL Server. Varje funktion möjliggör specifika mönsterbaserade textåtgärder.

REGEXP_LIKE

Kontrollerar om en sträng matchar ett mönster för reguljära uttryck. Returnerar 1 om den matchar, 0 annars.

REGEXP_SUBSTR

Extraherar den första delsträngen som matchar ett mönster för reguljära uttryck. Användbart för att hämta specifik information, till exempel telefonnummer, datum eller e-postadresser.

REGEXP_REPLACE

Söker efter ett mönster i en sträng och ersätter alla förekomster som matchar mönstret. Den kan användas för datarensning och formatering.

REGEXP_INSTR

Returnerar startpositionen för den första delsträngen som matchar mönstret i den angivna texten. Perfekt för att hitta nyckelmarkörer i strukturerad text.

REGEXP_COUNT

Räknar antalet matchningar för ett reguljärt uttrycksmönster i en viss sträng. Det här antalet är användbart när du behöver mäta mönsterfrekvens, till exempel räkna siffror, ord eller symboler i text.

REGEXP_MATCHES

Returnerar alla understrängar som matchar ett mönster för reguljära uttryck som ett tabellresultat. Använd den när du behöver flera avbildningar från en enda sträng i stället för bara den första matchningen.

REGEXP_SPLIT_TO_TABLE

Delar upp en sträng i flera rader med en avgränsare för reguljära uttryck.

SUBSTRING-FÖRBÄTTRING

Funktionen SUBSTRING stöder nu en valfri längdparameter. När det utelämnas extraheras automatiskt från den angivna startpositionen till slutet av strängen, vilket minskar behovet av manuella LEN()-beräkningar.

Med de här funktionerna kan du söka, extrahera och manipulera textmönster direkt i SQL Server 2025 med kortfattad, läsbar T-SQL.


Exempelscenario: Extrahera och rensa kontaktdata

Ett marknadsföringsteam underhåller en databas med kundmeddelanden i en kolumn med namnet MessageText. Många poster innehåller telefonnummer i olika format. Du måste extrahera det första telefonnumret från varje meddelande, normalisera det till ett standardformat och identifiera meddelanden som innehåller ogiltiga telefonnummer.

Exempeldata

Anta att du har följande exempeldata i en tabell med namnet CustomerMessages:

MessageID Meddelandetext
1 "Ring mig på (713) 555-1298 eller office 555-8811."
2 Tack! Kontakta mig: +1-832-555-7821
3 "Mitt nummer är 713-555-9876 ext. 33"
4 "Ingen telefon listad än."

Fråga: Identifiera, extrahera och standardisera

-- Extract the first phone number pattern and format it consistently
SELECT MessageID,
       REGEXP_SUBSTR(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}') AS RawNumber,
       REGEXP_REPLACE(
           REGEXP_SUBSTR(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}'),
           '\D', ''
       ) AS DigitsOnly,
       CASE 
           WHEN REGEXP_LIKE(MessageText, '\d{3}[)\-\s]*\d{3}[\-\s]*\d{4}') = 1 THEN 'Valid'
           ELSE 'Missing'
       END AS PhoneStatus
FROM dbo.CustomerMessages;

Results

MessageID RawNumber DigitsOnly PhoneStatus
1 (713) 555-1298 7135551298 Giltigt
2 +1-832-555-7821 18325557821 Giltigt
3 713-555-9876 7135559876 Giltigt
4 NOLL NOLL Försvunnen

Det här exemplet används REGEXP_SUBSTR för att extrahera det första matchande mönstret, REGEXP_REPLACE ta bort icke-numeriska tecken och REGEXP_LIKE verifiera giltiga tal. Frågan standardiserar telefonnummer till ett konsekvent format med enbart siffror direkt i T-SQL.


Exempel 2: Dela upp data med REGEXP_SPLIT_TO_TABLE och SUBSTRING

Anta att en annan tabell, CustomerFeedback, lagrar kommaavgränsade taggar som beskriver kundernas intressen. Du vill dela upp dem i enskilda rader och extrahera det första nyckelordet för snabbindexering.

SELECT FeedbackID,
       value AS Tag,
       SUBSTRING(value, 1) AS FirstWord
FROM CustomerFeedback
CROSS APPLY REGEXP_SPLIT_TO_TABLE(Tags, '\s*,\s*');

Den här frågan delar upp varje kommaavgränsad sträng i rader när du använder det nya SUBSTRING beteendet (utan att ange längd) för att extrahera hela återstående text från startpositionen.

Results

FeedbackID Tag FörstaOrd
1 resa resa
1 fotografi fotografi
2 vandring vandring
2 camping camping

Sammanfattning

De nya REGEXP-funktionerna och den förbättrade funktionen SUBSTRING i SQL Server 2025 ger inbyggda funktioner för mönstermatchning och textextrahering. Dessa tillägg eliminerar behovet av extern strängbearbetning, vilket gör det enklare att rensa, parsa och analysera textdata i databasmotorn. Med dessa verktyg kan utvecklare förenkla ETL-pipelines, förbättra datakvaliteten och aktivera avancerad textdriven analys direkt i T-SQL.