Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Solusi Ekspresi Reguler SQL Server di T-SQL?

Sayangnya, Anda tidak akan dapat memindahkan fungsi CLR Anda ke SQL Azure. Anda perlu menggunakan fungsi string normal (PATINDEX, CHARINDEX, LIKE, dan seterusnya) atau melakukan operasi ini di luar database.

EDIT Menambahkan beberapa informasi untuk contoh yang ditambahkan ke pertanyaan.

Alamat email

Yang ini selalu kontroversial karena orang tidak setuju tentang versi RFC mana yang ingin mereka dukung. Yang asli tidak mendukung apostrof, misalnya (atau setidaknya orang bersikeras bahwa itu tidak - saya belum menggalinya dari arsip dan membacanya sendiri, memang), dan itu harus cukup sering diperluas untuk yang baru TLD (sekali untuk TLD 4 huruf seperti .info, lalu lagi untuk TLD 6 huruf seperti .museum). Saya sering mendengar orang yang cukup berpengetahuan menyatakan bahwa validasi email yang sempurna tidak mungkin, dan setelah sebelumnya bekerja untuk penyedia layanan email, saya dapat memberi tahu Anda bahwa itu adalah target yang terus bergerak. Tetapi untuk pendekatan paling sederhana, lihat pertanyaan Validasi Email TSQL (tanpa regex ) .

Satu digit angka

Mungkin yang paling mudah:

WHERE @s LIKE '[0-9]';

Nomor kartu kredit

Dengan asumsi Anda menghapus tanda hubung dan spasi, yang harus Anda lakukan dalam hal apa pun. Perhatikan bahwa ini bukan pemeriksaan algoritme nomor kartu kredit yang sebenarnya untuk memastikan bahwa nomor itu sendiri benar-benar valid, hanya saja sesuai dengan format umum (AmEx =15 digit dimulai dengan 3, sisanya 16 digit - Visa dimulai dengan 4, MasterCard dimulai dengan 5, Discover dimulai dengan 6 dan menurut saya ada yang dimulai dengan 7 (meskipun itu mungkin hanya semacam kartu hadiah)):

WHERE @s + ' ' LIKE '[3-7]'+ REPLICATE('[0-9]', 14) + '[0-9 ]';

Jika Anda ingin sedikit lebih tepat dengan biaya bertele-tele, Anda dapat mengatakan:

WHERE (LEN(@s) = 15 AND @s LIKE '3'     + REPLICATE('[0-9]', 14))
   OR (LEN(@s) = 16 AND @s LIKE '[4-7]' + REPLICATE('[0-9]', 15));

Nomor telepon AS

Sekali lagi, dengan asumsi Anda akan menghapus tanda kurung, tanda hubung, dan spasi terlebih dahulu. Cukup yakin kode area AS tidak dapat dimulai dengan 1; jika ada aturan lain, saya tidak mengetahuinya.

WHERE @s LIKE '[2-9]' + REPLICATE('[0-9]', 9);

------strong>

Saya tidak akan melangkah lebih jauh, karena banyak ekspresi lain yang telah Anda definisikan dapat diekstrapolasi dari atas. Semoga ini memberi Anda awal. Anda harus dapat Google untuk beberapa orang lain untuk melihat bagaimana orang lain telah mereplikasi pola dengan T-SQL. Beberapa dari mereka (seperti hari-hari dalam seminggu) mungkin hanya dapat diperiksa pada tabel - tampaknya berlebihan untuk melakukan pencocokan pola invasie untuk satu set 7 nilai yang mungkin. Demikian pula dengan daftar 1000 angka atau tahun, ini adalah hal-hal yang akan jauh lebih mudah (dan mungkin lebih efisien) untuk memeriksa apakah nilai numerik ada dalam tabel daripada mengubahnya menjadi string dan melihat apakah itu cocok dengan beberapa pola.

Saya akan menyatakan lagi bahwa banyak dari ini akan jauh lebih baik jika Anda dapat membersihkan dan memvalidasi data sebelum masuk ke database di tempat pertama. Anda harus berusaha melakukan ini sedapat mungkin, karena tanpa CLR, Anda tidak dapat melakukan RegEx yang kuat di dalam SQL Server.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SSRS:Cara membuat laporan SEPERTI tabel pivot di ssrs 2008 r2

  2. Alat Data SQL Server Visual Studio 2015 tidak ada opsi Tambahkan Tabel

  3. Cara yang lebih baik untuk memeriksa apakah data sudah ada dan masukkan

  4. Tes Kinerja MS SQL Server di Linux vs Windows untuk Menemukan Perbedaannya

  5. T-SQL:Menghapus semua baris duplikat tetapi menyimpannya