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
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:
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.
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
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.