날짜에 대한 최대 절전 모드 조건
Oracle에서 날짜 형식이 있습니다.
17-2011년 4월-19:20:23.707000000
저는 17-04-2011에 대한 모든 주문을 회수하고 싶습니다.
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
Criteria criteria =
session.createCriteria(Order.class);
Criterion restrictDate = Restrictions.like("orderDate",date);
하지만 그것은 나에게 공허한 결과를 가져옵니다.
사용하는 이유Restrictions.like(...)?
사용해야 합니다.Restrictions.eq(...).
참고 또한 사용할 수 있습니다..le,.lt,.ge,.gt날짜 개체를 비교 연산자로 지정합니다. LIKE연산자가 이 경우에 적합하지 않습니다.LIKE열의 부분 내용에 따라 결과를 일치시키려면 유용합니다.참고 자료는 http://www.sql-tutorial.net/SQL-LIKE.asp 을 참조하십시오.
예를 들어, 일부 사용자의 전체 이름을 가진 이름 열이 있는 경우 다음을 수행할 수 있습니다.where name like 'robert %'이름이 다음으로 시작하는 모든 항목을 반환합니다.'robert '(%모든 문자를 대체할 수 있습니다.
사용자의 경우 일치하려는 날짜의 전체 내용을 알고 있으므로 사용하면 안 됩니다.LIKE그러나 평등.Hibernate는 이 경우에 어떠한 예외도 주지 않는다고 생각하지만, 어쨌든 당신은 아마도 같은 문제를 겪을 것입니다.Restrictions.eq(...).
코드로 얻은 날짜 객체:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
이 날짜 개체는 0h, 0분, 0초 및 0나노초에서 17-04-2011과 동일합니다.
이것은 데이터베이스의 항목이 정확한 날짜를 가져야 한다는 것을 의미합니다.즉, 데이터베이스 항목의 날짜가 "17-4월-2011 19:20:23.707000000"이면 "17-4월-2011 00:00:0000000000"이라고만 요청하기 때문에 검색되지 않습니다.
지정된 날짜에서 데이터베이스의 모든 항목을 검색하려면 다음 코드를 사용해야 합니다.
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
// Create date 17-04-2011 - 00h00
Date minDate = formatter.parse(myDate);
// Create date 18-04-2011 - 00h00
// -> We take the 1st date and add it 1 day in millisecond thanks to a useful and not so known class
Date maxDate = new Date(minDate.getTime() + TimeUnit.DAYS.toMillis(1));
Conjunction and = Restrictions.conjunction();
// The order date must be >= 17-04-2011 - 00h00
and.add( Restrictions.ge("orderDate", minDate) );
// And the order date must be < 18-04-2011 - 00h00
and.add( Restrictions.lt("orderDate", maxDate) );
이 방법을 사용하면 선택한 레코드 목록을 가져올 수 있습니다.
GregorianCalendar gregorianCalendar = new GregorianCalendar();
Criteria cri = session.createCriteria(ProjectActivities.class);
cri.add(Restrictions.ge("EffectiveFrom", gregorianCalendar.getTime()));
List list = cri.list();
모든 기록은 '08-Oct-2012' 이상이거나 사용자 승인 날짜를 통과한 목록으로 생성됩니다. 제한 사항의 두 번째 매개 변수(gregorianCalendar.getTime()) 기록을 가져오는 기준입니다.
열이 타임스탬프인 경우 다음을 수행할 수 있습니다.
if(fromDate!=null){
criteria.add(Restrictions.sqlRestriction("TRUNC(COLUMN) >= TO_DATE('" + dataFrom + "','dd/mm/yyyy')"));
}
if(toDate!=null){
criteria.add(Restrictions.sqlRestriction("TRUNC(COLUMN) <= TO_DATE('" + dataTo + "','dd/mm/yyyy')"));
}
resultDB = criteria.list();
이것을 시도해 보세요.
String dateStr = "17-April-2011 19:20:23.707000000 ";
Date dateForm = new SimpleDateFormat("dd-MMMM-yyyy HH:mm:ss").parse(dateStr);
SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
String newDate = format.format(dateForm);
Calendar today = Calendar.getInstance();
Date fromDate = format.parse(newDate);
today.setTime(fromDate);
today.add(Calendar.DAY_OF_YEAR, 1);
Date toDate= new SimpleDateFormat("dd-MM-yyyy").parse(format.format(today.getTime()));
Criteria crit = sessionFactory.getCurrentSession().createCriteria(Model.class);
crit.add(Restrictions.ge("dateFieldName", fromDate));
crit.add(Restrictions.le("dateFieldName", toDate));
return crit.list();
언급URL : https://stackoverflow.com/questions/5790602/hibernate-criteria-for-dates
'programing' 카테고리의 다른 글
| Android Spinner: 선택한 항목 변경 이벤트 가져오기 (0) | 2023.06.15 |
|---|---|
| 루비에서 안전한 조인 경로 이름을 수행하는 방법은 무엇입니까? (0) | 2023.06.15 |
| 특정 단어를 사용하여 엑셀의 한 줄을 복사하고 다른 엑셀 시트에 붙여넣는 방법은 무엇입니까? (0) | 2023.06.15 |
| 로컬 스토리지에서 Vuex 상태가 업데이트되지 않음 (0) | 2023.06.15 |
| Excel 2010에서 워크시트 전체를 새 워크시트에 복사 (0) | 2023.04.21 |