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