Potrivirea modelelor și extragerea textului
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.