Mönstermatchning och textextrahering
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.