Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa cara terbaik untuk memotong tanggal di SQL Server?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menemukan Semua Pelanggaran Batasan di Database SQL Server

  2. Apa cara terbaik untuk menerapkan Asosiasi Polimorfik di SQL Server?

  3. Kembalikan Persentase Kumpulan Hasil di SQL Server

  4. Inner Bergabung dengan tiga tabel

  5. Cara Mendapatkan nilai Maks dan Min dari Tabel dengan menggunakan Fungsi Agregat - Tutorial SQL Server / TSQL Bagian 129