it-swarm.asia

Cara mendapatkan tanggal saat ini tanpa bagian waktu

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

88
Piers Myers

The tercepat jika Anda harus mengulangi set rekaman dan tidak memiliki tanggal di SQL Server 2008

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

Dua jawaban berbeda dan sangat baik di StackOverflow memberikan ini: Sat , 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 mendapatkan ketahuan 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)

Edit:

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 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 pamungkas ke datatypes datetime oleh Tibor Karaszi.

125
gbn

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)
6
mrdenny