Misal kita ingin membentuk no transaksi dengan format:
[prefix]-[2 digit tahun][2 digit bulan]-[4 digit no urut]
Diasumsikan tabel penjualan mempunyai struktur sebagai berikut:
1. Kolom no_trx dengan tipe data varchar(20), constraint: Primary Key
2. Kolom tgl_trx dengan tipe data datetime, constraint: Not Null
Dari asumsi tersebut, maka no transaksi penjualan adalah:
PJ-1110-0001
Kita bisa menyelesaikannya dengan sebuah query:
SELECT ‘PJ-‘ +
———– CONVERT(VARCHAR, RIGHT( YEAR( GETDATE() ) , 2) ) +
———– RIGHT(‘0’ + CONVERT(VARCHAR, MONTH( GETDATE() ) ) , 2) + ‘-‘ +
———– RIGHT(‘000’ +
———————- (
———————- SELECT CASE WHEN MAX(no_trx) IS NULL THEN ‘1’
——————————— ELSE CONVERT(VARCHAR,RIGHT(MAX(no_trx),4) + 1)
——————————— END no_trx
———————- FROM trx_penjualan
———————- WHERE MONTH(tgl_trx)=MONTH(GETDATE()) AND
——————————— YEAR(tgl_trx)=YEAR(GETDATE())
———————- ) , 4);
NB:
Tanda —- hanya sebagai alat bantu pemahaman query-nya saja.
Bagaimana cara kerjanya:
- Untuk prefix, kita bisa langsung menuliskan prefixnya
- Untuk pengambilan 2 digit tahun, kita mengambil tahun dari
tanggal sekarang –> YEAR(GETDATE()). Setelah tahun didapatkan,
kita tinggal mengambil 2 digit belakangnya menggunakan
RIGHT(… ,2) - Untuk pengambilan 2 digit bulan, kita mengambil bulan dari
tanggal sekarang –> MONTH(GETDATE()). Namun, perlu dipahami
bahwa bulan September membentuk 1 digit bulan (9), sedangkan
bulan Oktober membentuk 2 digit bulan(10). Untuk 1 digit bulan
kita harus menambahkan karakter 0 –> ‘0’ + CONVERT(VARCHAR, …).
Untuk membatasi karakter lebih dari 3 menjadi 2, kita bisa
memotong karakter tersebut menggunakan RIGHT(… ,2) - Untuk pengambilan 4 digit no urut, kita mengambil no urut
menggunakan MAX(no_trx) + 1. Namun, untuk mengatasi
kekosongan (NULL), maka dibuat kondisi (CASE WHEN).
Selanjutnya untuk 4 digit-nya, samakan dengan langkah no 3.
Bayangkan jika query tersebut harus ada disetiap insert into, bisa pusing kalo ada error. Kita bisa membuat sebuah object database (bisa function, bisa stored procedure, atau bahkan trigger) untuk membentuk No Transaksi secara otomatis atau umum disebut sebagai generator no transaksi.
Untuk pembuatan object ini, tunggu update selanjutnya.
Semoga bermanfaat