Periode Kerja [21 – 20]

Kalau dilihat dari judulnya mungkin masih membingungkan. Maksud Aku mengambil judul tersebut adalah membuat suatu function SQL yang mendifinisikan penanggalan periode kerja / periode pembukuan pada beberapa corporate / perusahaan.

Periode penanggalan tersebut sebagai berikut :

  1. Bulan Januari : 01 Januari – 20 Januari
  2. Bulan Februari : 21 Januari – 20 Februari
  3. Bulan Maret : 21 Februari – 20 Maret
  4. Bulan April : 21 Maret –  20 April
  5. Bulan Mei : 21 April – 20 Mei
  6. Bulan Juni : 21 Mei – 20 Juni
  7. Bulan Juli : 21 Juni – 20 Juli
  8. Bulan Agustus : 21 Juli – 20 Agustus
  9. Bulan September : 21 Agustus – 20 September
  10. Bulan Oktober : 21 September – 20 Oktober
  11. Bulan November : 21 Oktober- 20 November
  12. Bulan Desember : 21 November – 31 Desember

Untuk orang-orang keuangan atau orang administrasi mungkin tidak asing dengan periode penanggalan tersebut. Seorang IT / programmer / DBA harus mengetahui hal tersebut. Awalnya Aku bingung bagaimana mengambil data dengan masukkan bulan saja. Ada beberapa yang mengambil solusi untuk memecah tiap bulan menjadi dua, yaitu 21-31 bulan + 01-20 bulan.

Disini Aku akan memberikan dua buah function SQL membantu perhitungan tersebut. Function ini digunakan pada WHERE [input tanggal] BETWEEN @awal AND @akhir. Cuplikan syntax sebagai berikut :

1. function dengan parameter [bulan, tahun], ini mendifinisikan setiap bulan menggunakan if else, misal :

DECLARE @bulan nvarchar(2), @tahun nvarchar(4), @awal smalldatetime, @akhir smalldatetime

IF @bulan = ’01’

BEGIN

SET @awal = @thn +’-01-01 00:00:00′

SET @akhir = @thn +’-01-20 23:59:59′

SELECT @awal, @akhir

END

ELSE IF @bulan = ’02’

BEGIN

SET @awal = @thn +’-01-21 00:00:00′

SET @akhir = @thn +’-02-20 23:59:59′

SELECT @awal, @akhir

END

[dst]

2. function dengan parameter [tanggal, bulan, tahun], cara dibawah ini lebih ringkas dibanding dengan cara diatas. Pertama kita difinisikan bulan khusus, yaitu bulan januari dan bulan desember. Sisanya menggunakan standart.

DECLARE @th nvarchar(4), @bln nvarchar(2), @tgl nvarchar(2), @today smalldatetime, @jan smalldatetime, @des smalldatetime, @akhir smalldatime

BEGIN
SET @today = @th +’-‘ + @bln +’-‘ + @tgl
SET @jan = @th+’-‘+’01’+’-‘+’20  ‘
SET @des = @th+’-‘+’11’+’-‘+’21’
IF @today <= @jan
BEGIN
SET @hasil = (SELECT DATEADD(dd,-(DAY(DATEADD(mm,1,@today))-21),DATEADD(mm,0,@today)))
END
ELSE IF @today >= @des
BEGIN
SET @akhir = (SELECT DATEADD(dd, -DAY(DATEADD(m,1,@today)), DATEADD(m,1,@today)))
END
ELSE IF @tgl > 20
BEGIN
SET @akhir = (SELECT DATEADD(dd,-(DAY(DATEADD(mm,1,@today))-21),DATEADD(mm,+1,@today)))
END
ELSE IF @tgl <= 20
BEGIN
SET @hasil = (SELECT DATEADD(dd,-(DAY(DATEADD(mm,1,@today))-21),DATEADD(mm,0,@today)))
END
END

*perlu diperhatikan pada fungsi DATEADD menggunakan tanggal akhir -21, karena konversi otomatis smalldatetime adalah “21-09-2011 00:00:00”

Semoga membantu.

Download file sql @myMediaFire

 

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s