Sunday 23 September 2012

Summation time in sql server ( SUM waktu di SQL Server )

 

Penjumlahan waktu dengan menggunakan SQL Server
Misalnya ada data sebagai berikut :
Di suatu kelas diadakan seleksi lari dengan batas waktu minimum adalah 15 detik.

b1b3h.blogspot.com

misal : kolom waktu dan Delay tipe datanya varchar

Hitung jumlah waktu dan delay dari ke lima siswa tersebut diatas.
Menggunakan fungsi SUM(Waktu) untuk menjumlahkan data waktu dan delay tidak dapat dilakukan, oleh karena itu harus dilakukan beberapa langkah:

1. Rubah waktu dan delay menjadi tipe data Time dengan CAST(kolom as time) 
    (jika kolom tersebut tipe data bukan DateTime)
   
       Misal tipe data waktu dan delay semula adalah varchar rubah menjadi time
          
          Cast(waktu as Time)

          Untuk yang Delay karena ada tanda minus harus disesuaikan terlebih dahulu dengan menggunakan         
       
       CASE WHEN Left(Delay,1)='-' Then Cast(SUBSTRING(Delay,2,10) as Time) END

2. Rubah Time menjadi satuan detik dengan menggunakan Datediff(Second,'00:00:00',kolom)
        
          Datediff(second,'00:00:00',Cast(waktu as Time)) as waktu
          
         Datediff(second,'00:00:00',CASE WHEN Left(Delay,1)='-' Then 
         Cast(SUBSTRING(Delay,2,10) as Time) else 0 END) as Delay

3. Jumlahkan dengan menggunakan SUM(waktu) dan SUM(delay)
       
          SUM(Datediff(second,'00:00:00',Cast(waktu as Time))) as waktu
        
        SUM(CASE WHEN Left(Delay,1)='-' Then         
        Datediff(second,'00:00:00',Cast(SUBSTRING(Delay,2,10) as Time))
        else 0 END)


Dengan demikian didapat hasil dalam satuan detik.
Kode Selengkapnya sampai langkah nomor 3 adalah sebagai berikut :

select  SUM(datediff(second,'00:00:00',CAST(Waktu as Time))) as Waktu,
SUM(case when Left(Delay,1)='-' then 
Datediff(second,'00:00:00',Cast(substring(Delay,2,10) as Time)) else 0 end) as Delay
from  DataLari


4.  Jika ingin hasil ditampilkan dalam bentuk waktu maka tambahkan perintah DateAdd(second,waktu,'00:00:00')

select  DateAdd(second,SUM(datediff(second,'00:00:00',CAST(Waktu as Time))),'00:00:00') as Waktu,
DateAdd(second,SUM(case when Left(Delay,1)='-' then 
Datediff(second,'00:00:00',Cast(substring(Delay,2,10) as Time)) else 0 end),'00:00:00') as Delay
from  DataLari


5. Jika masih belum merasa puas dengan hasil tampilannya, dan masih ingin dalam bentuk waktu tanpa hari gunakan CONVERT(Time,Waktu)

select  Convert(Time,DateAdd(second,SUM(datediff(second,'00:00:00',CAST(Waktu as Time))),'00:00:00')) as Waktu,
Convert(Time,DateAdd(second,SUM(case when Left(Delay,1)='-' then 
Datediff(second,'00:00:00',Cast(substring(Delay,2,10) as Time)) else 0 end),'00:00:00')) as Delay
from  DataLari




Semoga bermanfaat!












No comments:
Write comments