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

Pendekatan terbaik untuk menghapus bagian waktu dari datetime di SQL Server

Sebenarnya, metode a adalah sumber daya yang paling tidak intensif:

a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

Terbukti lebih sedikit CPU intensif untuk durasi total yang sama satu juta baris oleh seseorang dengan terlalu banyak waktu di tangan mereka:Cara paling efisien di SQL Server untuk mendapatkan tanggal dari tanggal+waktu?

Saya melihat tes serupa di tempat lain dengan hasil serupa juga.

Saya lebih suka DATEADD/DATEDIFF karena:

  • varchar tunduk pada masalah bahasa/format tanggal
    Contoh:Mengapa ekspresi CASE saya non-deterministik?
  • float bergantung pada penyimpanan internal
  • meluas untuk berolahraga hari pertama bulan, besok, dll dengan mengubah basis "0"

Edit, Okt 2011

Untuk SQL Server 2008+, Anda dapat CAST ke date yaitu CAST(getdate() AS date) . Atau cukup gunakan date tipe data jadi tidak ada time untuk dihapus.

Edit, Jan 2012

Contoh yang berhasil tentang betapa fleksibelnya ini:Perlu menghitung berdasarkan waktu atau angka tanggal di sql server

Sunting, Mei 2012

Jangan gunakan ini dalam klausa WHERE dan sejenisnya tanpa berpikir:menambahkan fungsi atau CAST ke kolom membatalkan penggunaan indeks. Lihat nomor 2 di sini Kesalahan Umum Pemrograman SQL

Sekarang, ini memang memiliki contoh versi pengoptimal SQL Server yang mengelola CAST hingga saat ini dengan benar, tetapi umumnya itu akan menjadi ide yang buruk ...

Edit, Sep 2018, untuk datetime2

DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'

select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghapus bagian waktu dari nilai datetime (SQL Server)?

  2. Nama kolom atau jumlah nilai yang diberikan tidak sesuai dengan definisi tabel

  3. SQL Dinamis vs Prosedur Tersimpan

  4. Kirim Email dari Pemicu di SQL Server (T-SQL)

  5. Pelajari Cara Melakukan Analisis Produk dengan Pencarian Teks Lengkap SQL Server. Bagian 2