Potrivirea modelelor și extragerea textului

Finalizat

SQL Server 2025 adaugă noi funcții de expresie regulată (REGEXP) și îmbunătățește funcția pentru a simplifica lucrul SUBSTRING cu text structurat. Aceste adăugiri permit dezvoltatorilor să efectueze căutări flexibile de text, să extragă modele complexe și să curețe sau să transforme date direct în T-SQL, fără a se baza pe scripturi pe partea clientului sau pe funcții CLR.

Prezentare generală a funcțiilor de potrivire a modelelor și extragerea textului

Noua familie de funcții REGEXP acceptă evaluarea expresiilor regulate direct în SQL Server. Fiecare funcție permite operațiuni specifice de text bazate pe modele.

REGEXP_LIKE

Verifică dacă un șir se potrivește cu un model de expresie regulată. Returnează 1 dacă se potrivește, 0 în caz contrar.

REGEXP_SUBSTR

Extrage primul subșir care se potrivește cu un model de expresie regulată. Util pentru a extrage informații specifice, cum ar fi numere de telefon, date sau adrese de e-mail.

REGEXP_REPLACE

Caută un model într-un șir și înlocuiește toate aparițiile care se potrivesc cu modelul. Poate fi folosit pentru curățarea și formatarea datelor.

REGEXP_INSTR

Returnează poziția de pornire a primului subșir care se potrivește cu modelul din textul dat. Ideal pentru localizarea marcajelor cheie în text structurat.

REGEXP_COUNT

Contorizează numărul de potriviri ale unui model de expresie regulată într-un șir dat. Această numărare este utilă atunci când trebuie să măsurați frecvența modelului, cum ar fi numărarea cifrelor, cuvintelor sau simbolurilor din text.

REGEXP_MATCHES

Returnează toate subșirurile care se potrivesc cu un model de expresie regulată ca rezultat de tabel. Utilizați-l atunci când aveți nevoie de mai multe capturi dintr-un singur șir, mai degrabă decât doar prima potrivire.

REGEXP_SPLIT_TO_TABLE

Împarte un șir în mai multe rânduri folosind un delimitator de expresii regulate.

Îmbunătățire SUBSTRING

Funcția acceptă SUBSTRING acum un parametru opțional de lungime. Când este omis, extrage automat din poziția de pornire specificată până la sfârșitul șirului, reducând nevoia de calcule manuale LEN().

Împreună, aceste capabilități vă permit să căutați, să extrageți și să manipulați modele de text direct în SQL Server 2025 cu T-SQL concis și lizibil.


Exemplu de scenariu: extragerea și curățarea datelor de contact

O echipă de marketing menține o bază de date cu mesaje ale clienților într-o coloană numită MessageText. Multe intrări includ numere de telefon în diferite formate. Trebuie să extrageți primul număr de telefon din fiecare mesaj, să-l normalizați într-un format standard și să identificați mesajele care conțin numere de telefon nevalide.

Exemple de date

Să presupunem că aveți următoarele date eșantion într-un tabel numit:CustomerMessages

ID mesaj Textul mesajului
1 "Sunați-mă la (713) 555-1298 sau la biroul 555-8811."
2 "Contactați-mă: +1-832-555-7821 mulțumesc!"
3 "Numărul meu este 713-555-9876 ext. 33"
4 "Nu există încă niciun telefon listat."

Interogare: Identificarea, extragerea și standardizarea

-- 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;

Rezultate

ID mesaj Număr brut Numai cifre Starea telefonului
1 (713) 555-1298 7135551298 Valabil
2 +1-832-555-7821 18325557821 Valabil
3 713-555-9876 7135559876 Valabil
4 ZERO ZERO Absent

Acest exemplu utilizează REGEXP_SUBSTR pentru a extrage primul model de potrivire, REGEXP_REPLACE pentru a elimina caracterele non-numerice și pentru a verifica numerele REGEXP_LIKE valide. Interogarea standardizează numerele de telefon într-un format consistent de doar cifre direct în T-SQL.


Exemplul 2: Împărțirea datelor cu REGEXP_SPLIT_TO_TABLE și SUBSTRING

Să presupunem că un alt tabel, CustomerFeedback, stochează etichete separate prin virgulă care descriu interesele clienților. Doriți să le separați în rânduri individuale și să extrageți primul cuvânt cheie pentru indexare rapidă.

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

Această interogare împarte fiecare șir delimitat prin virgulă în rânduri în timp ce utilizează noul SUBSTRING comportament (fără a specifica lungimea) pentru a extrage întregul text rămas din poziția de pornire.

Rezultate

FeedbackID Etichetă Primul cuvânt
1 călătorie călătorie
1 fotografie fotografie
2 Drumeţii Drumeţii
2 camping camping

Rezumat

Noile funcții REGEXP și funcția SUBSTRING îmbunătățită din SQL Server 2025 oferă capabilități native de potrivire a modelelor și extragere a textului. Aceste adăugiri elimină necesitatea procesării externe a șirurilor, facilitând curățarea, analiza și analiza datelor textuale din motorul bazei de date. Cu aceste instrumente, dezvoltatorii pot simplifica conductele ETL, pot îmbunătăți calitatea datelor și pot permite analize avansate bazate pe text direct în T-SQL.