Fabric Data Warehouse içinde düzenli ifade fonksiyonlarını kullanın

Şunlar için geçerlidir:✅ Microsoft Fabric'te SQL analiz uç noktası ve Ambarı

Düzenli ifade (regex) fonksiyonları, karmaşık metin desenlerini eşleştirmenize ve T-SQL sorgularınızda doğrudan dize verilerini manipüle etmenize olanak tanır. Bunları formatları doğrulamak, yarı yapılandırılmış metinden değerler çıkarmak, desen oluşumlarını saymak ve verileri depodan dışarı taşımadan temizlemek veya maskelemek için kullanın.

Note

Düzenli ifadeler şu anda önizleme aşamasında.

Warehouse ve SQL analitik uç noktası skaler düzenli ifade fonksiyonlarını destekler. Bu fonksiyonların her biri giriş satırı başına bir değer döndürür, böylece bunları SELECT listesinde, WHERE, JOIN, GROUP BY, ORDER BY ve CASE ifadelerde kullanabilirsin.

Note

Warehouse'da yalnızca skaler düzenli ifade fonksiyonları mevcuttur. Tablo değerli REGEXP_MATCHES ve REGEXP_SPLIT_TO_TABLE fonksiyonları desteklenmiyor.

Desteklenen işlevler

Function Dönüş türü Description
REGEXP_LIKE Boolean Metin girişinin regex deseniyle eşleşip eşleşmediğini gösterir. Örneğin bir WHERE yan tümce veya CASE ifadede yüklem olarak kullanın.
REGEXP_REPLACE String ifadesi Regex deseninin eşleşmelerinin bir değiştirme dizesiyle değiştirildiği kaynak dizeyi döndürür. Eşleşme bulunmazsa, orijinal diziyi döndürür.
REGEXP_SUBSTR Dize ifadesi Regex deseniyle uyumlu bir alt dizinin n. kez oluşmasını döndürür.
REGEXP_INSTR int Eşleşen alt dizinin başlangıç veya bitiş konumunu döndürür.
REGEXP_COUNT int Regex deseninin bir dizede kaç kez geçtiğini döndürür.

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 ] ] )

Her argümanın tam tanımı için Desteklenen fonksiyonlar bölümündeki bağlantılı fonksiyon referansına bakınız.

Flags

Isteğe bağlı flags argüman, eşleşme değiştiricileri belirleyen 30 karaktere kadar bir char veya varchar değeridir. Çelişkili bayraklar sunarsanız, sonuncusu kazanır. Örneğin, 'ic' büyük/küçük harfe duyarlı eşleştirmeye neden olur.

Flag Description
c Büyük/küçük harfe duyarlı eşleştirme. Bu varsayılan seçenektir.
i Büyük/küçük harfe duyarsız eşleştirme.
m Çok satırlı mod: ^ ve $ her satırın başı ve sonunu, ayrıca metnin başı ve sonunu eşleştir.
s . Yeni satır karakterini \neşleştirelim.

Considerations

  • string_expression argümanı, karakter dizisi türlerini kabul eder. Büyük değerler (varchar(max)) 2 MB'a kadar desteklenir.
  • Argüman pattern_expression , maksimum 8.000 bayt uzunluğunu destekler.
  • Düzenli ifade işlevleri harmanlama kurallarına uymaz. Eşleşme, diğer dize karşılaştırmalarından farklı olabilir, örneğin LIKE. Büyük/küçük harf duyarlılığını kontrol etmek için, sütun harmanlamasına güvenmek yerine c ve i bayraklarını kullanın. Daha fazla bilgi için bkz. Veri Ambarı harmanlaması.
  • REGEXP_LIKE Boolean değeri döndürür ve doğrudan sütun olarak döndürülemez. Sonucu sütun olarak döndürmek için, onu bir CASE ifadesi içine alın.

Examples

Aşağıdaki örnekler küçük bir satır içi veri seti kullanır, böylece bunları herhangi bir depo veya SQL analitik uç noktasında çalıştırabilirsiniz.

A. Bir desenle eşleşen satırları filtreleyin

Yalnızca geçerli e-posta adresi biçimine sahip satırları döndürmek için, REGEXP_LIKE yan tümcesinde WHERE kullanın.

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,}$');

Eşleşme sonucunu sütun olarak döndürmek için REGEXP_LIKE öğesini bir CASE ifadesiyle sarın:

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. Metinden bir değer çıkarma

Serbest metin yorumundan, REGEXP_SUBSTR biçimini ve ardından gelen rakamları izleyen ilk sipariş numarasını çıkarmak için ORD- kullanın.

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

Yalnızca eşleşmenin bir kısmını çıkarmak için bir yakalama grubu kullanın. Aşağıdaki sorgu, her e-posta adresinin alan adını döndürür:

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

C. Desen oluşumlarını say

Her dizede kaç sayı olduğunu saymak için kullanılır REGEXP_COUNT .

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. Bir eşleşmenin konumunu bul

İlk basamak dizisinin başlangıç ve bitiş pozisyonunu bulmak için kullanılır REGEXP_INSTR .

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. Verileri temizleyin ve maskeleyin

Telefon numaralarını yakalama gruplarıyla standartlaştırmak ve son dört rakam hariç hepsini maskelemek için kullanılır REGEXP_REPLACE .

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

Aşağıdaki sorgu, tekrarlanan boşlukları tek bir boşluğa birleştirir:

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

F. Grupla ve çıkarılmış bir değere göre topla

Fonksiyonlar skaler olduğu için, bunları GROUP BY yan tümcelerinde kullanabilirsiniz. Aşağıdaki sorgu, e-posta alan adı başına müşterileri sayar.

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