2014-09-05 26 views
10

Hazırda iki kez hql sorguyu karşılaştırmak zorundayım. java.util.Date java fasulyemde kullanıyorum ve mysql veritabanında datatype olarak zaman damgasını kullanıyorum. Sorguyu tarih ile karşılaştırmak için yukarıdaki değerleri tıklatın. Yukarıdaki sorguyu tarih olmadan karşılaştırmak için ne yapmalıyım?Tarih Zaman damgası olmadan HQL içinde karşılaştırın

cevap

13

bu hat

second(...), minute(...), hour(...), day(...), month(...), and year(...) 

Yani bu tatmin edici olarak rapor

... where year(t.endDate) > year(t.startDate) 
    and month(t.endDate) > month(t.startDate) 
    and day(t.endDate) > day(t.startDate) 

çözüm çalışması gerekir kullanılabilir tarih fonksiyonları

bölüm 14.10 bildirimde

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

için hazırda dokümantasyon bakın soru

... where DATE(t.endDate) > (t.startDate) 
+0

Bu bana ay ve yıl ayrı ayrı karşılaştırma veriyor ... ama bir gün gibi ** tam tarih ** ile karşılaştırmak zorundayım * 06-09-2014 ** –

+2

Aşağıdaki değişiklikle çalışır ** burada DATE (t.endDate)> (t.startDate) ** –

+0

Sizin için çalıştığıma sevindim. Çözümü yorumlarınızda bırakmak yerine, çözümünüzle cevabı düzenliyorum. Bu şeyler yapmak için Stackoverflow yoludur. – carbontax

0

date() fonksiyonu ile teklif edilen çözüm saf SQL olmak görünmüyor ve (SQL Server kullanarak) benim için çalışmaz. Orijinal çözüm (gün, ay ve yılı tek tek karşılaştırarak) doğru yönde bir adımdır, ancak bu şekilde yapılamaz, örneğin, bir tarihin gelecekte olması için, ayın daha büyük olması gerekmez. Daha büyük, vb. Ancak, aşağıdaki SQL çalışmalıdır:

(year(t.endDate) > year(t.startDate)) 
or 
(year(t.endDate) = year(t.startDate) 
    and 
    month(t.endDate) > month(t.startDate)) 
or 
(year(t.endDate) = year(t.startDate) 
    and 
    month(t.endDate) = month(t.startDate) 
    and 
    day(t.endDate) > day(t.startDate)) 
İlgili konular