Fungsi Datediff untuk mendapatkan selisih waktu
Gunakan Fungsi
DATEDIFF ( datepart , startdate , enddate )
untuk menghitung seilish waktu
Select datediff(d,'6/25/2012','12/31/2012')
result : 189
Select datediff(m,'6/25/2012','12/31/2012')
result : 6
Select datediff(yy,'6/25/2012','12/31/2012')
result : 0
Contoh penggunaan datediff yang cukup rumit
Menentukan berapa bulan karyawan bekerja di tahun 2012 ini hingga 1 Oktober 2012 berdasarkan tanggal masuknya.
NIK Nama Tanggal_Masuk
=== ======== ====================
A001 Andrianto 21 April 2010
A002 Aswin 15 Oktober 2010
A003 Anwar 12 Februari 2011
A004 Arfan 05 Maret 2012
A005 Bobon 23 Mei 2012
NIK Nama Tanggal_Masuk Jumlah_bulan_kerja_2012
=== ======== =========== ==========================
A001 Andrianto 21 April 2010 9
A002 Aswin 15 Oktober 2010 9
A003 Anwar 12 Februari 2011 9
A004 Arfan 05 Maret 2012 6
A005 Bobon 23 Mei 2012 4
DATEDIFF ( datepart , startdate , enddate )
untuk menghitung seilish waktu
Datepart | Abbreviations |
---|---|
Year | yy, yyyy |
quarter | qq, q |
Month | mm, m |
dayofyear | dy, y |
Day | dd, d |
Week | wk, ww |
Hour | hh |
minute | mi, n |
second | ss, s |
millisecond | ms |
Select datediff(d,'6/25/2012','12/31/2012')
result : 189
Select datediff(m,'6/25/2012','12/31/2012')
result : 6
Select datediff(yy,'6/25/2012','12/31/2012')
result : 0
Contoh penggunaan datediff yang cukup rumit
Menentukan berapa bulan karyawan bekerja di tahun 2012 ini hingga 1 Oktober 2012 berdasarkan tanggal masuknya.
NIK Nama Tanggal_Masuk
=== ======== ====================
A001 Andrianto 21 April 2010
A002 Aswin 15 Oktober 2010
A003 Anwar 12 Februari 2011
A004 Arfan 05 Maret 2012
A005 Bobon 23 Mei 2012
Jika kita langsung menggunakan rumus datediff(m, tanggal_masuk,'10/1/2012') hasilnya akan salah, karena kita hanya menghitung di tahun 2012 saja.
dengan sedikit penambahan fungsi case dan mod (%) maka berikut hasilnya:
Select nik, nama, tanggal_masuk, datediff(M,Case when tanggal_masuk<'1/1/2012' then '1/1/2012' else tanggal_masuk end,'10/1/2012') % 12 as jumlah_bulan_kerja_2012
from mstkaryawan
NIK Nama Tanggal_Masuk Jumlah_bulan_kerja_2012
=== ======== =========== ==========================
A001 Andrianto 21 April 2010 9
A002 Aswin 15 Oktober 2010 9
A003 Anwar 12 Februari 2011 9
A004 Arfan 05 Maret 2012 6
A005 Bobon 23 Mei 2012 4
Penjelasan :
datediff(M,Case when tanggal_masuk<'1/1/2012' then '1/1/2012' else tanggal_masuk end,'10/1/2012')
Datediff('M',...,...) digunakan untuk selisih bulan antara tanggal masuk dengan tanggal 1 Oktober 2012.
Case digunakan jika tanggal masuk karyawan < '1/1/2012' maka dianggap masa kerja karyawan tahun 2012 dimulai dari bulan Januari
Contoh :
A001 Andrianto 21 April 2010 (menjadi 1/1/2012') 9 (dari Januari 2012 s/d 1 Oktober 2012)
A002 Aswin 15 Oktober 2010 (menjadi 1/1/2012') 9 (dari Januari 2012 s/d 1 Oktober 2012)
A003 Anwar 12 Februari 2011 (menjadi 1/1/2012') 9 (dari Januari 2012 s/d 1 Oktober 2012)
A002 Aswin 15 Oktober 2010 (menjadi 1/1/2012') 9 (dari Januari 2012 s/d 1 Oktober 2012)
A003 Anwar 12 Februari 2011 (menjadi 1/1/2012') 9 (dari Januari 2012 s/d 1 Oktober 2012)
Jika tanggal masuk kerja lebih dari (>) 1/1/2012 maka langsung dihitung dari tanggal masuk kerja .
A004 Arfan 05 Maret 2012 6 (dari Maret 2012 s/d 1 Oktober 2012)
A005 Bobon 23 Mei 2012 4 (dari Mei 2012 s/d 1 Oktober 2012)
A005 Bobon 23 Mei 2012 4 (dari Mei 2012 s/d 1 Oktober 2012)
Sedangkan untuk fungsi MOD itu sendiri menggunakan tanda %
datediff(M,Case when tanggal_masuk<'1/1/2012' then '1/1/2012' else tanggal_masuk end,'10/1/2012') % 12 as jumlah_bulan_kerja_2012
... % 12 maka akan mengambil sisa pembagian bulan dari tanggal masuk dibagi 12.