Bunu yapmanın tek mantıklı yolu datetime değerlerinin saat bölümünü kaldırdığını ve sonuçları ve datetime gelen saat bölümünü şerit için en iyi yolu karşılaştırmaktır şu şekildedir:
cast(current_timestamp as date)
kullandığım ve aşağıdaki iki satır biri gibi görünüyordu bir süreç savunmak kullandı:
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
Ama şimdi SQL Server zaman bileşeni tutmaz Date
türü, sahip olduğu, ya da kullanmak için çok az neden var bu tekniklerin. Burada akılda tutulması gereken
Bir şey daha, bir yerde maddelerinde veya katılmak durumda her satır için iki datetime değerleri için bunu yapmak gerekiyorsa, bu hala bir sorgu gömmeye gidiyor olmasıdır. Eğer mümkünse, örneğin bir görünümü veya hesaplanmış bir sütun kullanarak, mümkün olduğunca önceden hesaplanmış olacak şekilde, bunu bir şekilde hesaba katmak istersiniz.
Son olarak, DATEDIFF işlevi geçti sınırları sayısını karşılaştırır unutmayın. Bu nedenle, '2009-09-14 11:59:59'
ve '2009-09-15 00:00:01'
arasındaki günlerde, yalnızca 2 saniyelik süre geçmesine rağmen, 1 günlüğüne sahip olan tarih, '2009-09-15 00:00:01'
ve '2009-09-15 11:59:59'
arasındaki günlerde DATEDIFF, 86,398 saniye geçmesine rağmen hala sıfırdır. Buradaki zaman dilimiyle ilgili hiç umrumda değil. Sorgunuzun ne yapmaya çalıştığına bağlı olarak, bunu kendi avantajınıza göre kullanabileceksiniz. İki tarih eşit olduğunu belirlemek istedik Kendi eserde;
Erken optimizasyonla ilgilenmeyin: 'DATEDIFF' kullanarak sorgunuzu yazın, ardından bir darboğaz olup olmadığını görün ve sorgu planını incelemeyin. Eğer sorunsa, bir alternatif arayınız. arasında – Welbog
Olası kopyalar (http://stackoverflow.com/questions/1177449/best-approach-to-remove-time-part-of-datetime-in-sql- [İyi bir yaklaşımla, SQL Server datetime zaman parçası kaldırmak için] sunucu) – abatishchev