2013-02-27 10 views

cevap

9

Zaten sahip olduğunuz küçük bir ayarlamaya ihtiyacınız var.

SELECT * 
FROM progen.DY 
WHERE TIME(DY_DATE) <> '00:00:00:000' 

Kullanım CONVERT senin DATETIME bir TIME geçmek için.

SELECT * 
FROM progen.DY 
WHERE CONVERT(TIME, DY_DATE) <> '00:00:00:000' 
+0

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

+0

@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. –

3

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.

2
SELECT * 
FROM progen.DY 
WHERE CONVERT(TIME, DY_DATE - CONVERT(DATE, DY_DATE)) > '00:00' 
3

başka yolu da, farklı veri türüne dönüştürmek olduğunu örn

SELECT * 
FROM progen.DY 
WHERE CAST(DY_DATE as float) - CAST(DY_DATE as int) > 0 
2

Bunun bir tablonun sütun olmalıdır görmek çalışıyor hep yapıyor bir tarih yerine bir tarihe dönüştü, bu gerçekten cevap.

select * 
from progen.dy 
where cast(dy_date as Date) <> dy_date 

dökme zamanı ortadan kaldırır ve tarih saat yüksek önceliğe sahiptir, bu yüzden karşılaştırıldığında eşit değilse, o zaman bir zaman değeri vardır. Aynı şey, farklı bir sözdizimi ile, zaman zaman oyuncularla yapılabilir.

İlgili konular