2013-02-15 6 views
2

У меня есть одна таблица, в которой есть столбец submitted_date (отметка времени без часовой пояс). Мне нужно перечислить все записи в таблице, имеющие конкретную дату в качестве даты. Но не учитывайте время в базе данных. Я извлекаю записи, используя запрос критериев и спящий режим. Как игнорировать время здесь?запрос на спящий режим для временной отметки

Фактически я передаю дату с клиентской стороны и должен получить записи, имеющие ту же дату, что и submit_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 для одного поля даты - это.

Спящий режим приведен ниже.

<?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> 

У меня есть две записи в базе данных, отправившие данные, как показано ниже.

2013-02-15 00:00:00

2013-02-15 13: 04: 42,787

Когда я делаю запрос для фильтрации записей, имеющих дату, как сегодня, первая запись с представляется дата 2013-02-15 00:00:00 только восстанавливается.

это потому, что объект даты я использовал для запроса, также имеет это значение «2013-02-15 00:00:00»

Как я сделать запрос, который будет игнорировать часть времени?

+0

не могли бы вы объяснить, что вы подразумеваете под «Но не считаете время в базе данных»? –

+0

waht вы еще не пробовали. ваш вопрос не выяснен –

+0

Не нужно учитывать время чего? Системное время или время db? Время исполнения? – aksappy

ответ

5

Для этого вам придется применить ограничение, которое выбирает все даты между submittedDate и 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-02-15 и дата окончания = 2013-02-16

+1

Я использую фильтр спящего режима. как я это сделаю с фильтром? – 1355

+0

Я избегал использования фильтра и мог работать с этим. – 1355

+0

У меня такая же проблема, и я должен решить ее с помощью той же логики на следующий день и получить запись GE 'date' и LT 'nextdate' – JegsVala

1

Просто добавьте ограничение на свои критерии для свойства, соответствующего столбцу submitted_date. Вы можете написать его как

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

Параметр даты должен быть тем, с которым вы хотите сравнить свое время. –

+0

Я еще раз обновил вопрос. не могли бы вы заглянуть в него? – 1355

4

Вы можете попробовать ниже код, который использует встроенную функцию Oracle trunc сбросить время при сравнении.

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

Вы можете изменить функцию, соответствующую поставщику базы данных.

Смежные вопросы