Penjumlahan waktu dengan menggunakan SQL Server
Misalnya ada data sebagai berikut :
Di suatu kelas diadakan seleksi lari dengan batas waktu minimum adalah 15 detik.
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