Untuk membulatkan ke sepanjang hari terdekat , ada tiga pendekatan yang digunakan secara luas. Yang pertama menggunakan datediff
untuk menemukan jumlah hari sejak 0
tanggal Waktu. 0
datetime sama dengan 1 Januari 1900. Dengan menambahkan perbedaan hari ke tanggal mulai, Anda telah membulatkan menjadi satu hari penuh;
select dateadd(d, 0, datediff(d, 0, getdate()))
Metode kedua berbasis teks:metode ini memotong deskripsi teks dengan varchar(10)
, hanya menyisakan bagian tanggal:
select convert(varchar(10),getdate(),111)
Metode ketiga menggunakan fakta bahwa datetime
benar-benar floating point yang mewakili jumlah hari sejak 1900. Jadi dengan membulatkannya ke bilangan bulat, misalnya menggunakan floor
, Anda memulai hari:
select cast(floor(cast(getdate() as float)) as datetime)
Untuk menjawab pertanyaan kedua Anda, awal minggu lebih rumit. Salah satu caranya adalah dengan mengurangi hari dalam seminggu:
select dateadd(dd, 1 - datepart(dw, getdate()), getdate())
Ini mengembalikan bagian waktu juga, jadi Anda harus menggabungkannya dengan salah satu metode penghilangan waktu untuk mendapatkan kencan pertama. Misalnya, dengan @start_of_day
sebagai variabel untuk keterbacaan:
declare @start_of_day datetime
set @start_of_day = cast(floor(cast(getdate() as float)) as datetime)
select dateadd(dd, 1 - datepart(dw, @start_of_day), @start_of_day)
awal tahun, bulan, jam, dan menit masih bekerja dengan pendekatan "perbedaan sejak 1900":
select dateadd(yy, datediff(yy, 0, getdate()), 0)
select dateadd(m, datediff(m, 0, getdate()), 0)
select dateadd(hh, datediff(hh, 0, getdate()), 0)
select dateadd(mi, datediff(mi, 0, getdate()), 0)
Pembulatan demi detik memerlukan pendekatan yang berbeda, karena jumlah detik sejak 0
memberikan luapan. Salah satu cara mengatasinya adalah menggunakan awal hari, bukan tahun 1900, sebagai tanggal referensi:
declare @start_of_day datetime
set @start_of_day = cast(floor(cast(getdate() as float)) as datetime)
select dateadd(s, datediff(s, @start_of_day, getdate()), @start_of_day)
Untuk membulatkan dalam 5 menit , sesuaikan metode pembulatan menit. Ambil hasil bagi dari selisih menit, misalnya menggunakan /5*5
:
select dateadd(mi, datediff(mi,0,getdate())/5*5, 0)
Ini juga berfungsi selama seperempat setengah jam.