Cara mendapatkan tanggal saat ini tanpa bagian waktu

83

Dalam SQL Server 2005 bagaimana cara mendapatkan tanggal saat ini tanpa bagian waktu? Saya telah menggunakan GETDATE()tetapi ingin memiliki waktu 00: 00: 00.0

Piers Myers
sumber

Jawaban:

119

Yang tercepat jika Anda harus mengulangi set rekaman dan tidak memiliki tanggal dalam SQL Server 2008

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

Dua jawaban berbeda dan sangat baik di StackOverflow memberikan jawaban ini: Satu , Dua

Konversi varchar adalah salah satu cara terburuk untuk melakukannya. Tentu saja, untuk satu nilai mungkin tidak masalah, tetapi itu kebiasaan yang baik untuk masuk.

Cara ini juga deterministik, katakanlah jika Anda ingin mengindeks kolom yang dihitung. Bahkan orang-orang yang menulis buku tentang SQL Server terjebak dengan konversi datetime

Teknik ini juga dapat diperpanjang.

  • kemarin: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • awal bulan: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • akhir bulan lalu: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • mulai bulan depan: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Sunting:

Seperti yang saya sebutkan tentang determinisme, metode varchar tidak aman kecuali jika Anda menggunakan style 112.

Jawaban lain di sini menunjukkan bahwa Anda tidak akan pernah menerapkan ini pada kolom. Ini benar, tetapi Anda mungkin ingin memilih 100k baris atau menambahkan kolom yang dihitung atau GROUP BY dateonly saja. Maka Anda harus menggunakan metode ini.

Jawaban lainnya juga menyebutkan gaya 110. Ini bukan bahasa atau SET DATEFORMAT aman dan gagal dengan pengaturan bahasa "Inggris". Lihat panduan utama untuk tipe data datetime oleh Tibor Karaszi.

gbn
sumber
1
Tautan yang diberikan sudah mati.
Viswanathan Iyer
6

Anda harus mengonversinya menjadi varchar yang menetapkan pola format (110 dalam hal ini) kemudian mengonversi (atau membuang) kembali ke datetime.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
mrdenny
sumber