Di SQL server 2008, saya ingin mendapatkan kolom datetime dibulatkan ke jam terdekat dan menit terdekat sebaiknya dengan fungsi yang ada di 2008.
Untuk nilai kolom ini 2007-09-22 15:07:38.850
, outputnya akan terlihat seperti:
2007-09-22 15:08 -- nearest minute
2007-09-22 15 -- nearest hour
sql
sql-server
tsql
sql-server-2008
pengguna219628
sumber
sumber
Jawaban:
akan kembali
Di atas hanya memotong detik dan menit, menghasilkan hasil yang diminta dalam pertanyaan. Seperti yang ditunjukkan @OMG Ponies, jika Anda ingin membulatkan ke atas / ke bawah, maka Anda dapat menambahkan masing-masing setengah menit atau setengah jam, lalu potong:
dan Anda akan mendapatkan:
Sebelum tipe data tanggal ditambahkan di SQL Server 2008, saya akan menggunakan metode di atas untuk memotong bagian waktu dari datetime untuk hanya mendapatkan tanggal. Idenya adalah untuk menentukan jumlah hari antara tanggal waktu yang dimaksud dan titik waktu tetap (
0
, yang secara implisit ditransmisikan ke1900-01-01 00:00:00.000
):lalu tambahkan jumlah hari tersebut ke titik waktu tetap, yang memberi Anda tanggal asli dengan waktu yang disetel ke
00:00:00.000
:atau lebih singkatnya:
Menggunakan bagian data yang berbeda (mis.
hour
,mi
) Akan bekerja sesuai dengan itu.sumber
datetimeoffset
, saya harus menggantinya0
denganTODATETIMEOFFSET('1900-01-01 00:00:00', 0)
untuk menghindari memaksa zona waktu lokal ke hasil."Dibulatkan" ke bawah seperti pada contoh Anda. Ini akan mengembalikan nilai varchar dari tanggal tersebut.
sumber
CONVERT(datetime, CONVERT(VARCHAR(13), @date, 120)+':00:00')
Saya menyadari pertanyaan ini kuno dan ada jawaban yang diterima dan alternatif. Saya juga menyadari bahwa jawaban saya hanya akan menjawab setengah dari pertanyaan, tetapi bagi siapa pun yang ingin membulatkan ke menit terdekat dan masih memiliki nilai yang kompatibel dengan waktu hanya dengan menggunakan satu fungsi :
Selama berjam-jam atau detik, gunakan jawaban Jeff Ogata (jawaban yang diterima) di atas.
sumber
smalldatetime
ditambahkan dalam SQL 2008.Select convert(char(8), DATEADD(MINUTE, DATEDIFF(MINUTE, 0, getdate), 0), 108) as Time
akan membulatkan detik ke bawah menjadi 00
sumber