Zaman kısmı olmadan güncel tarih nasıl alınır


83

SQL Server 2005'te o andaki tarihi zaman kısmı olmadan nasıl edinebilirim? Ben kullanıyorum GETDATE()ama 00 bir zaman var bunu istiyorum: 00: 00.0

Yanıtlar:


119

En hızlı bir recordset üzerinde yineleme yapmak zorunda ve SQL Server 2008 tarih yoksa

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

StackOverflow'taki iki farklı ve mükemmel cevap bunu ortaya koyuyor: Bir , İki

Varchar dönüşümleri bunu yapmanın en kötü yollarından biridir. Tabii ki, bir değer için önemli olmayabilir ama içine girmek için iyi bir alışkanlık.

Bu yol aynı zamanda deterministiktir, bir hesaplanan sütunu indekslemek isteyip istemediğinizi söyleyin. SQL Server hakkında kitap yazan folklorlar bile tarih dönüşümü ile yakalandılar.

Bu teknik de genişletilebilir.

  • dün: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • ayın başlangıcı: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • geçen ayın sonu: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • gelecek ayın başlangıcı: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Düzenle:

Determinizmden bahsettiğim gibi, tarz 112'yi kullanmadığınız sürece varchar yöntemleri güvenli değildir.

Buradaki diğer cevaplar, bunu asla bir sütuna uygulamayacağınıza işaret eder. Bu doğrudur, ancak 100k satır seçmek veya hesaplanmış bir sütun veya GROUP BY dateonly eklemek isteyebilirsiniz. O zaman bu yöntemi kullanmalısın.

Diğer cevap da stil 110'dan bahseder. Bu, dil veya SET DATEFORMAT için güvenli değildir ve "ingiliz" dil ayarlarıyla başarısız olur. Tibor Karaszi'nin datetime datatypes kılavuzuna bakınız.


1
Sağlanan bağlantı öldü.
Viswanathan Iyer

6

Bir format deseni belirterek varchar'a dönüştürmelisiniz (bu durumda 110), sonra tekrar tarih tarihine dönüştürün (veya dönüştürün).

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.