Phone Number Pattern Match di SQL

Soeleman 27 April 2017

Phone Number Pattern Match di SQL

Menemukan data yang paling mendekati dengan nilai yang terdapat di-table lainnya akan terlihat rumit dan memerlukan pengulangan per-pattern-nya. Contohnya kita ada data telepon nomor, yang kita ingin tahu dari operator mobile yang mana atau area nomor tersebut. Tentu data operator sudah tetap dan kita bisa taruh dalam sebuah table. Pada tulisan kali ini kita akan coba hal yang sebetulnya umum tapi jarang dibahas.

Table

Sekarang kita siapkan table pendukung untuk tulisan ini.

Table Rates

Table Rates ini berisi data prefix nomor salah satu penyedia layanan mobile. Pengaturan harga per-60 detik dibagi berdasarkan nomor awal.

alt text

Table Bills

Dalam Table Bills kita melihat data penggunaan komunikasi dari beberapa extension disertai durasi dalam detik.

alt text

Target Resultset

Yang ingin dicapai adalah menghitung biaya dari setiap pengunaan yang ada. Kita mencocokkan data dest dengan prefix yang terdekat. Dan kita juga melakukan pembulatan ke atas untuk biaya, karena rate itu untuk per-60 detik. Bila duration ada yang kurang dari 60 detik maka ia akan dijadikan 60 detik.

alt text

SQL

Walaupun ini terlihat rumit tapi ini adalah fungsi dasar dari SQL. Yang dimaksud adalah fungsi LIKE dengan pattern '%'. Untuk itu kita kombinasikan dengan CONCAT untuk mendapatkan pattern yang berdasarkan prefix-nya.

MySQL

Untuk mendapatkan kombinasi pattern antara dest dengan prefix kita gunakan LIKE dengan CONCAT. Dan kita hanya ambil yang paling besar kombinasinya dengan MAX.

Kita juga membulatkan duration lewat CEIL lalu dikalikan dengan nilai rate-nya.

alt text

T-SQL

Tidak banyak berbeda untuk T-SQL. Kita tetap menggunakan LIKE yang dikombinasikan dengan CONCAT dan MAX. Dan pembulatannya kita gunakan CEILING.

alt text

Dan resultset-nya sama dengan yang kita perlukan.

alt text

Penutup

Pemanfaattan dari fungsi LIKE yang tepat, dapat membantu kita mem-filter seperti yang kita mau. Walaupun kita dihadapkan dengan data yang terlihat sulit untuk disatukan.

Referensi

Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code. Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production. Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.