Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:✅ Titik akhir analitik SQL dan Gudang di Microsoft Fabric
Fungsi ekspresi reguler (regex) memungkinkan Anda mencocokkan pola teks kompleks dan memanipulasi data string secara langsung dalam kueri T-SQL Anda. Gunakan untuk memvalidasi format, mengekstrak nilai dari teks semi-terstruktur, menghitung kemunculan pola, serta membersihkan atau menyembunyikan data tanpa memindahkannya keluar dari data warehouse.
Note
Ekspresi reguler saat ini sedang dalam pratinjau.
Warehouse dan endpoint SQL analytics mendukung fungsi regular expression scalar. Setiap fungsi ini mengembalikan satu nilai per baris input, sehingga Anda dapat menggunakannya dalam ekspresi SELECT, WHERE, JOIN, GROUP BY, ORDER BY, dan CASE.
Note
Hanya fungsi ekspresi reguler skalar yang tersedia di Warehouse. Fungsi bernilai tabel REGEXP_MATCHES dan REGEXP_SPLIT_TO_TABLE tidak didukung.
Fungsi yang didukung
| Function | Tipe pengembalian | Description |
|---|---|---|
| REGEXP_LIKE | Boolean | Menunjukkan apakah input teks sesuai dengan pola regex. Gunakan sebagai predikat, misalnya dalam klausa WHERE atau ekspresi CASE. |
| REGEXP_REPLACE | Ekspresi string | Mengembalikan string sumber dengan kemunculan pola regex digantikan oleh string pengganti. Jika tidak ditemukan kecocokan, mengembalikan string asli. |
| REGEXP_SUBSTR | Ekspresi untai | Mengembalikan kemunculan substring yang ke-n yang sesuai dengan pola regex. |
| REGEXP_INSTR | int |
Mengembalikan posisi awal atau akhir dari substring yang cocok. |
| REGEXP_COUNT | int |
Mengembalikan jumlah kali pola regex muncul dalam sebuah string. |
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 ] ] )
Untuk deskripsi lengkap setiap argumen, lihat referensi fungsi yang ditautkan di Supported functions.
Penanda
Argumen opsional flags berupa nilai char atau varchar hingga 30 karakter yang mengatur modifier yang sesuai. Jika Anda memberikan flag yang saling bertentangan, flag terakhir yang berlaku. Misalnya, 'ic' menghasilkan pencocokan peka huruf besar/kecil.
| Tanda | Description |
|---|---|
c |
Pencocokan peka huruf besar/kecil. Ini adalah default. |
i |
Pencocokan yang Tidak Peka Huruf Besar/Kecil. |
m |
Mode multi-baris: ^ dan $ cocok dengan awal dan akhir setiap baris, selain awal dan akhir teks. |
s |
Mari kita . cocokkan karakter newline \n. |
Considerations
- Argumen
string_expressionmenerima tipe string karakter. Nilai besar (varchar(max)) didukung hingga 2 MB. - Argumen
pattern_expressionmendukung panjang maksimum 8.000 byte. - Fungsi ekspresi reguler tidak menghormati aturan kolasi. Pencocokan dapat berbeda dari perbandingan string lain, seperti
LIKE. Untuk mengontrol sensitivitas huruf besar/kecil, gunakan flagidancdaripada mengandalkan kolasi kolom. Untuk informasi selengkapnya, lihat Kolate Gudang Data. -
REGEXP_LIKEmengembalikan nilai Boolean dan tidak dapat dikembalikan langsung sebagai kolom. Untuk mengembalikan hasil sebagai kolom, bungkus dalam ekspresiCASE.
Examples
Contoh berikut menggunakan set data inline kecil, sehingga Anda dapat menjalankannya di endpoint analitik warehouse atau SQL mana pun.
A. Filter baris yang sesuai dengan pola
Gunakan REGEXP_LIKE dalam WHERE klausa untuk mengembalikan hanya baris dengan format alamat email yang valid.
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,}$');
Untuk mengembalikan hasil kecocokan sebagai kolom, bungkus REGEXP_LIKE dalam ekspresi CASE:
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. Ekstrak nilai dari teks
Gunakan REGEXP_SUBSTR untuk mengekstrak nomor pesanan pertama dalam format ORD- diikuti oleh digit dari komentar teks bebas.
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);
Untuk mengekstrak hanya sebagian dari kecocokan, gunakan grup tangkap. Kueri berikut mengembalikan domain setiap alamat email:
SELECT REGEXP_SUBSTR(Email, '@(.+)$', 1, 1, 'c', 1) AS EmailDomain
FROM (VALUES ('anna@contoso.com'), ('bob@fabrikam.org')) AS c (Email);
C. Hitung kemunculan pola
Gunakan REGEXP_COUNT untuk menghitung berapa banyak angka yang muncul di setiap string.
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. Temukan posisi kecocokan
Gunakan REGEXP_INSTR untuk menemukan posisi awal, dan posisi akhir, dari rangkaian digit pertama.
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. Bersihkan dan samarkan data
Gunakan REGEXP_REPLACE untuk menstandarisasi nomor telepon dengan grup tangkap, dan untuk menyembunyikan semua kecuali empat digit terakhir.
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);
Kueri berikut menggabungkan spasi berulang menjadi satu spasi:
SELECT REGEXP_REPLACE('Fabric Data Warehouse', '\s+', ' ') AS CleanText;
F. Kelompokkan dan agregasikan berdasarkan nilai yang diekstrak
Karena fungsi-fungsi tersebut bersifat skalar, Anda dapat menggunakannya dalam klausa GROUP BY. Kueri berikut menghitung pelanggan per domain email.
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));