Kullanım DATEDIFF
ve DATEADD
yerine datetime tarih bölümünü alır. Sütunu yalnızca tarihle karşılaştırın ve sıfır olmayan bir zamana sahip satırları döndürür. Bu işleri
yolu öncelikle çağın ve değer arasında (gün) farkını hesaplamak olmasıdır. Yeni bir tarih saati oluşturmak için bu sayıyı çağa ekliyoruz. DATEDIFF
sonucu bir tam sayı olduğu için, her zaman bileşeni yuvarlanır alır.
SELECT *
FROM Table
WHERE DateColumn <> DATEADD(d, DATEDIFF(d, 0, DateColumn), 0)
zaman fonksiyonu daha sonra aşağıdakilerden tarafından uygulanabilecek bu belirli senaryo için tavsiye değil:
SELECT DATEDIFF(minute, DATEADD(d, DATEDIFF(d, 0, DateColumn), 0), DateColumn) as MinutesIntoDay,
-- or, if you require higher precision
DATEDIFF(second, DATEADD(d, DATEDIFF(d, 0, DateColumn), 0), DateColumn) as MinutesIntoDay
FROM Table
Düzenleme: diğer yanıtlar belirtildiği gibi yapabilirsiniz güzel temizler DATEADD(d, DATEDIFF(d, 0, DateColumn), 0)
aynı etkiyi elde etmek için, DATE
için döküm. Formül geri Tersten uyumluluk ihtiyaç veya TARİH için döküm SQL CE ile ilgileniyor Yani eğer en azından SQL 2000'e uyumluluktadır kullanılamaz oysa Ancak, TARİH sadece SQL Server 2008 yılında eklenmiştir.
Bu yöntemle ilgili herhangi bir sınırlama/endişe var mı? Eğer bu gerçekten en iyi yol buysa, teklifin bu kadar uzun sürmesi (diğer cevaplara dayanarak) bana tuhaf geliyor. – Codingo
@Michael En azından diğer cevaplarla karşılaştırılınca böyle bir sınırlama yoktur.Sütunlardaki işlevlerin uygulanmasıyla ilgili kötü bir şey, o sütundaki herhangi bir dizinin kullanılamaması ve SQL Server'ın ihtiyacınız olan satırları bulmak için bir tablo taraması yapmasıdır. –