Apakah ada pustaka ekspresi reguler yang ditulis dalam T-SQL (tanpa CLR, tanpa extended SP
, T-SQL murni) untuk SQL Server, dan itu harus bekerja dengan shared hosting?
Edit:
- Terima kasih, aku tahu tentang
PATINDEX
,LIKE
,xp_
sps
dan solusi CLR - Saya juga tahu itu bukan tempat terbaik untuk regex, pertanyaannya adalah teoritis :)
- Fungsi yang dikurangi juga diterima
sql-server
regex
tsql
xnagyg
sumber
sumber
SAFE
dan tidak ditandai sebagai salah satuEXTERNAL_ACCESS
atauUNSAFE
(karena saya mengerti mengapa 2 Set Izin yang terakhir itu akan bermasalah untuk lingkungan hosting bersama). Microsoft Azure SQL Database V12 (yaitu versi baru pada akhir 2014), yang merupakan lingkungan bersama, memungkinkan untuk Sidang ditandai sebagaiSAFE
(dan dimuat melaluiFROM 0x...
bukan dari DLL karena Anda tidak dapat mengunggah DLL). TetapiSAFE
adalah semua yang diperlukan untuk Ekspresi Reguler dan BANYAK fungsi lainnya yang sangat berguna.Jawaban:
Bagaimana dengan fungsi PATINDEX ?
Pencocokan pola dalam TSQL bukan pustaka regex lengkap, tetapi memberi Anda dasar-dasarnya.
(Dari Buku Daring)
sumber
LIKE
telah mendukung semuanyaPATINDEX
. Tidak tahu tentang itu sebelumnya ...%
cocok dengan 0 atau lebih karakter (terlepas dari),[...]
hanya cocok dengan satu, dan tidak ada di antara keduanya.Jika ada yang tertarik menggunakan regex dengan CLR di sini adalah solusinya. Fungsi di bawah ini (C # .net 4.5) mengembalikan 1 jika polanya cocok dan 0 jika polanya tidak cocok. Saya menggunakannya untuk menandai baris di sub kueri. Atribut SQLfunction memberitahu sql server bahwa metode ini adalah UDF aktual yang akan digunakan oleh server SQL. Simpan file sebagai dll di tempat Anda dapat mengaksesnya dari studio manajemen.
Di studio manajemen, impor file dll melalui programabilitas - rakitan - rakitan baru
Kemudian jalankan kueri ini:
Maka Anda harus memiliki akses lengkap ke fungsi melalui database tempat Anda menyimpannya.
Kemudian gunakan dalam pertanyaan seperti ini:
sumber
Ada beberapa pencocokan pola dasar yang tersedia melalui LIKE, di mana% cocok dengan angka dan kombinasi karakter apa pun, _ cocok dengan satu karakter apa pun, dan [abc] dapat cocok dengan a, b, atau c ... Ada info lebih lanjut di situs MSDN .
sumber
Jika Anda menggunakan SQL Server 2016 atau lebih baru, Anda bisa menggunakannya
sp_execute_external_script
bersama R. Ini memiliki fungsi untuk pencarian Ekspresi Reguler, sepertigrep
dangrepl
.Berikut ini contoh untuk alamat email. Saya akan meminta beberapa "orang" melalui mesin database SQL Server, meneruskan data untuk orang-orang itu ke R, biarkan R memutuskan orang mana yang memiliki alamat email yang tidak valid, dan meminta R untuk mengembalikan subset orang tersebut ke SQL Server. "Orang-orang" berasal dari
[Application].[People]
tabel dalam[WideWorldImporters]
database sampel. Mereka diteruskan ke mesin R sebagai nama dataframeInputDataSet
. R menggunakan fungsi grepl dengan operator "tidak" (tanda seru!) Untuk menemukan orang yang memiliki alamat email yang tidak cocok dengan pola pencarian string RegEx.Perhatikan bahwa fitur yang sesuai harus diinstal pada host SQL Server. Untuk SQL Server 2016, itu disebut "SQL Server R Services". Untuk SQL Server 2017, namanya diubah menjadi "SQL Server Machine Learning Services".
Pikiran Penutup Implementasi Microsoft terhadap SQL (T-SQL) tidak memiliki dukungan asli untuk RegEx. Solusi yang diusulkan ini mungkin tidak lebih diinginkan OP daripada penggunaan prosedur tersimpan CLR. Tapi itu memang menawarkan cara tambahan untuk mendekati masalah.
sumber
Jika ada orang lain yang masih melihat pertanyaan ini, http://www.sqlsharp.com/ adalah cara gratis dan mudah untuk menambahkan fungsi CLR ekspresi reguler ke dalam basis data Anda.
sumber
Anda dapat menggunakan fitur ekspresi reguler VBScript menggunakan OLE Automation. Ini jauh lebih baik daripada overhead untuk membuat dan memelihara perakitan. Pastikan Anda membaca bagian komentar untuk mendapatkan versi modifikasi utama yang lebih baik.
http://blogs.msdn.com/b/khen1234/archive/2005/05/11/416392.aspx
Jika Anda mendapatkan
SQL Server blocked access to procedure 'sys.sp_OACreate'...
kesalahan, gunakansp_reconfigure
untuk mengaktifkanOle Automation Procedures
. (Ya, sayangnya itu adalah perubahan level server!)Informasi lebih lanjut tentang
Test
metode ini tersedia di siniSelamat coding
sumber