2013-02-15 155 views
2

我有一個表,其中有列submitted_date(時間戳無時區)。我需要列出表中具有特定日期作爲提交日期的所有記錄。但不要考慮數據庫中的時間。我通過使用標準查詢和休眠來檢索記錄。如何忽略這裏的時間?休眠條件查詢時間戳

其實我從客戶端傳遞一個日期,並且必須檢索與submitted_date具有相同日期的記錄。但不需要考慮時間。

else if(extjsFilter.getField().equals("submittedDate")) { 
          String str_date=extjsFilter.getValue(); 
          SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy"); 
          SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd"); 
          Date date2 = format1.parse(str_date); 
          String datenew = format2.format(date2); 
          Date date = (Date)format2.parse(datenew); 

          if(extjsFilter.getType().equals("date")) 
          { 
           if(extjsFilter.getComparison().equals("gt")) 
           { 
            Filter postDateFilterGT = getSession().enableFilter("jobFilterPostDateGT"); 
            postDateFilterGT.setParameter("postDateFilterGT", date); 
           } 
           if(extjsFilter.getComparison().equals("lt")) 
           { 
            Filter postDateFilterLT = getSession().enableFilter("jobFilterPostDateLT"); 
            postDateFilterLT.setParameter("postDateFilterLT", date); 
           } 
           if(extjsFilter.getComparison().equals("eq")) 
           { 
            Filter postDateFilterEQ = getSession().enableFilter("jobFilterPostDateEQ"); 
            postDateFilterEQ.setParameter("postDateFilterEQ", date); 
           } 
          } 
} 

以上是我的代碼。客戶端使用extjs完成。 extjs過濾一個日期字段的服務器端代碼是這樣的。

hibernate在下面給出。

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping package="com.hiringsteps.ats.job.domain"> 
    <class 
     name="Job" 
     table="hs_job_master"> 

     <id name="id" column="job_id" unsaved-value="null"> 
      <generator class="sequence"> 
       <param name="sequence">hs_job_id_seq</param> 
      </generator> 
     </id> 

     <property name="submittedDate" column="submitted_date"/>     

     <filter name="jobFilterPostDateGT"><![CDATA[submitted_date > :postDateFilterGT]]></filter> 
     <filter name="jobFilterPostDateLT"><![CDATA[submitted_date < :postDateFilterLT]]></filter> 
     <filter name="jobFilterPostDateEQ"><![CDATA[:postDateFilterEQ = submitted_date]]></filter> 
    </class>  

    <filter-def name="jobFilterPostDateGT"> 
     <filter-param name="postDateFilterGT" type="date"/> 
    </filter-def> 
    <filter-def name="jobFilterPostDateLT"> 
     <filter-param name="postDateFilterLT" type="date"/> 
    </filter-def> 
    <filter-def name="jobFilterPostDateEQ"> 
     <filter-param name="postDateFilterEQ" type="date"/> 
    </filter-def> 
</hibernate-mapping> 

我在數據庫中有兩條記錄,其中submitted_date如下。

2013年2月15日00:00:00

2013年2月15日13:04:42.787

當我做一個查詢過濾使日期爲今天的記錄,以第一名的成績提交日期 2013-02-15 00:00:00只能被檢索。

這是因爲我用來查詢的日期對象,也有這個值 「2013年2月15日00:00:00」

我將如何進行查詢,將忽略時間部分?

+0

可以請你解釋一下'但是不考慮數據庫中的時間'是什麼意思? – 2013-02-15 07:08:53

+0

你試過了嗎?你的問題不清楚 – 2013-02-15 07:09:58

+0

不需要考慮什麼時間?系統時間還是db時間?執行時間? – aksappy 2013-02-15 07:12:45

回答

5

爲此,您必須應用一個限制,選擇submitDate和submittedDate + 1之間的所有日期。

//Resticts the dates between start date 0000 hrs and end date 0000 hrs 
criteria.add(Restrictions.ge("startDate", sDate)); 
criteria.add(Restrictions.lt("endDate", eDate)); 

在你的情況,的startDate = 2013年2月15日 和結束日期= 2013年2月16日

+1

我正在使用休眠過濾器。我將如何與過濾器做到這一點? – 1355 2013-02-15 08:39:25

+0

我避免使用過濾器,並可以與此工作。 – 1355 2013-02-15 10:42:01

+0

我有同樣的問題,我必須用相同的邏輯解決它找到第二天,並獲取記錄通用電氣'日期'和LT'nextdate' – JegsVala 2016-02-10 09:44:38

1

只需在對應於列submitted_date的屬性條件中添加限制即可。您可以將其編寫爲

criteria.add(Restrictions.eq("submittedDate"), '2013-02-15'); 
+0

日期參數應該是你想要比較你的時間的那個參數。 – 2013-02-15 07:13:43

+0

我再次更新了這個問題。你可以請看看它 – 1355 2013-02-15 07:30:59

4

你可以試試下面的代碼,它利用本地Oracle trunc功能丟棄的時間,同時比較。

criteria.add(Restrictions.sqlRestriction("trunc(submitted_date) = ?", submittedDate, org.hibernate.type.StandardBasicTypes.DATE)); 

您可以根據數據庫提供者修改函數。