2013-02-15 5 views
2

난 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); 
           } 
          } 
} 

위 코드는 내 코드입니다. 클라이언트 측은 extj를 사용하여 완료됩니다. 한 날짜 필드에 대한 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> 

다음과 같이 제출 된 날짜가있는 데이터베이스에 두 개의 레코드가 있습니다. 04 :

2013년 2월 15일 0시 0분 0초

2013년 2월 15일 13

나는 쿼리가 오늘로 날짜를 가진 레코드를 필터링 할 수 있도록 42.787, 첫 번째 레코드에 제출 날짜 2013-02-15 00:00:00 만 검색합니다. 내가 쿼리하는 데 사용 날짜 객체,이 값 '2013년 2월 15일 0시 0분 0초'

가 어떻게 시간 부분을 무시하는 쿼리를 만들 것입니다 있기 때문에

이 무엇입니까?

+0

'데이터베이스에서 시간을 고려하지 마십시오'라는 것이 무슨 뜻인지 설명해 주실 수 있습니까? –

+0

와우 아직 시도해 보셨습니까? 귀하의 질문은 명확하지 않습니다 –

+0

시간을 고려할 필요가 없습니다 무엇? 시스템 시간 또는 DB 시간? 사형 집행 시간? – aksappy

답변

5

로 쓸 수 있습니다. 귀하의 경우에는

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

+0

필자는 필터 사용을 피했으며이를 사용할 수있었습니다. – 1355

+0

나는 동일한 문제가 있고 나는 동일한 논리에 그것을 다음날 찾아 내고 GE 'date'와 LT 'nextdate'기록을 가져와야한다. – JegsVala

1

submit_date 열에 해당하는 속성에 대한 기준에 제한을 추가하기 만하면됩니다. 당신은 당신이 submittedDate 및 submittedDate + 1 사이의 모든 날짜를 선택 제한을 적용해야한다,이를 위해

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

날짜 매개 변수는 시간을 비교하려는 매개 변수 여야합니다. –

+0

질문을 한 번 더 업데이트했습니다. 당신은 그것을 들여다 볼 수 있을까요 – 1355

4

당신은 비교하면서 시간을 폐기하는 네이티브 오라클 trunc 기능을 이용하여 코드를 아래에 시도 할 수 있습니다.

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

데이터베이스 제공 업체에 따라 기능을 수정할 수 있습니다.