Saya memiliki bidang yang secara historis dapat digunakan orang untuk secara bebas memberikan nilai. Saya perlu mengidentifikasi catatan yang tidak memiliki nilai yang sesuai sehingga saya dapat membersihkannya.
Saya sudah mencari-cari di SSIS untuk ini. Kecenderungan saya adalah menggunakan komponen skrip dengan ekspresi regex dalam beberapa kode C #, diikuti dengan pengalihan. Namun, saya bertanya-tanya apakah ada cara di SSIS untuk melakukan ini tanpa menggunakan C #.
Saya belum beruntung menemukan cara untuk mengetahui berapa banyak catatan yang tidak memiliki nomor telepon yang sesuai.
sql-server
sql-server-2008
query
jujur
sumber
sumber
Jawaban:
Ini adalah tugas satu kali. Tulis aplikasi kecil atau cukup pilih skrip, gunakan C #, VB.NET, T-SQL ... dan analisis semua pola secara manual. Mungkin Anda akan mengetahui pola umum oleh operator yang memasukkan data ini. Tambahkan algoritma untuk setiap pola. Terapkan pola Anda ke data nyata dalam database. Hapus semua catatan "salah".
Keberuntungan.
TAMBAH:
Sebagai opsi, Anda dapat menggunakan basis data nomor telepon untuk memeriksa validitas person2number jika memungkinkan.
sumber
SSIS = SQL Server Integration Service - sebagian besar cara mengintegrasikan data dari banyak sumber ke banyak tujuan. Sesuatu seperti mesin untuk mengambil data dari excel / csv / text .. file lain apa yang terlintas dalam pikiran .. dan memindahkannya ke database. Atau sebaliknya.
Tetapi untuk benar-benar memilih dan memanipulasi data Anda masih bisa / harus menggunakan T-SQL.
Dari yang saya tahu T-SQL tidak memiliki komponen regex untuk membantu Anda, jadi Anda akan diminta untuk menggunakan .NET assembly untuk melakukannya.
sumber
Anda bisa mendapatkan perkiraan cepat melalui klausa WHERE berikut karena nomor telepon tidak boleh memiliki karakter alfa ... kecuali Anda mengizinkan nomor fonetis, mis. 1-800-ANT-FARM.
Anda tidak dapat melakukan regex kompleks menggunakan LIKE , tetapi Anda bisa mendapatkan perkiraan yang dekat.
Tes saya:
sumber
Itu tergantung apa yang dapat diterima atau tidak dalam nomor telepon
Ini memberi Anda semua nilai yang bukan 100% numerik dengan menggunakan TIDAK dalam pola pencarian
Tetapi jika Anda mengizinkan
-
atau(000)
lebih rumit: tolong minta sampel datasumber
Coba sesuatu seperti ini:
Jika Anda menemukan pola yang valid tetapi tidak tercakup oleh permintaan, tambahkan mereka ke bagian-bagian dan potongan-potongan yang ditunjukkan. Jika Anda menemukan sesuatu yang perlu disatukan dalam dua bagian, maka model setelah CTE Ekstensi (yang hilang atau kombinasi dari Ext1 dan Ext2). Jika Anda perlu mendukung angka internasional, dan mereka memiliki pola yang berbeda (tidak cocok dengan AS 3-3-4) maka Anda akan memerlukan beberapa analisis dan korelasi yang tepat untuk membuat kode negara yang tepat cocok dengan pola yang tepat. Misalnya, saya tahu bahwa di beberapa bagian Brasil, ini adalah angka yang valid: +55 85 1234-5678 (kode negara 55, kode area dua digit, kemudian pola 4-4).
Teknik lain untuk membantu Anda menganalisis data Anda adalah ini:
Ini dapat membantu Anda memahami seperti apa data Anda dengan mengabaikan perbedaan nomor telepon aktual antara setiap baris dan hanya memperhatikan pengaturan dan jumlah digit. Jika ada banyak karakter alfa, cobalah untuk mulai mengganti pola yang valid (seperti "ext") dengan nilai yang tidak ditemukan dalam daftar, sehingga Anda dapat menciutkan sisa input palsu menjadi sesuatu yang dapat dianalisis dengan serupa
Replace()
untuk setiap huruf dalam alfabet.sumber