Perbandingan Anda akan berfungsi, tetapi akan lambat karena tanggal diubah menjadi string untuk setiap baris. Untuk membandingkan dua bagian waktu secara efisien, coba:
declare @first datetime
set @first = '2009-04-30 19:47:16.123'
declare @second datetime
set @second = '2009-04-10 19:47:16.123'
select (cast(@first as float) - floor(cast(@first as float))) -
(cast(@second as float) - floor(cast(@second as float)))
as Difference
Penjelasan panjang:tanggal di SQL server disimpan sebagai angka floating point. Digit sebelum koma menunjukkan tanggal. Digit setelah koma menunjukkan waktu.
Jadi, inilah contoh tanggalnya:
declare @mydate datetime
set @mydate = '2009-04-30 19:47:16.123'
Mari kita ubah menjadi float:
declare @myfloat float
set @myfloat = cast(@mydate as float)
select @myfloat
-- Shows 39931,8244921682
Sekarang ambil bagian setelah karakter koma, yaitu waktu:
set @myfloat = @myfloat - floor(@myfloat)
select @myfloat
-- Shows 0,824492168212601
Ubah kembali menjadi waktu tanggal:
declare @mytime datetime
set @mytime = convert(datetime,@myfloat)
select @mytime
-- Shows 1900-01-01 19:47:16.123
1900-01-01 hanyalah tanggal "nol"; Anda dapat menampilkan bagian waktu dengan konversi, dengan menentukan misalnya format 108, yang merupakan waktunya:
select convert(varchar(32),@mytime,108)
-- Shows 19:47:16
Konversi antara datetime dan float cukup cepat, karena pada dasarnya disimpan dengan cara yang sama.