당신은 LocalDateTimes 작업 대신 직접 LocalDates를 사용하여 문제를 혼동하고 있습니다 :
val today = LocalDate.now
val todayLogItems = logItems.filter(_.MyDateTime.toLocalDate isEqual today)
UPDATE
주요 설명은 여기 질문에 필요하다, 슬릭 만에 언급 태그를 거쳐 전달합니다.
그러나 ... 슬릭은 filter
작업이 나는 도서관에 지나치게 익숙하지 않다 PlainColumnExtensionMethods
의 방법으로 SQL 쿼리에 실제로 있다는 사실에 경첩이 질문의 핵심입니다, 그러나 이것은해야 반드시 SQL로 실행될 수있는 작업에만 국한된다는 의미입니다. 이것은 Column [DateTime]이므로 다른 DateTime과 비교해야합니다.
LINQ 예제에서 모든 것을 먼저 가져온 다음 위의 예와 같이 진행하는 것이 좋습니다 (SQL이 아닌 스칼라에서 비교 수행). 이것은 옵션이지만 성능 비용이 필요하지 않을 것으로 생각됩니다.
업데이트 2 아무 대답이 없다
(단지 명확하게).
기본 데이터베이스가 날짜와 시간 소인간에 동등한 검사를 수행 할 수 있다는 보장이 없으므로 매끄러운 따라서 기존의 능력에 의존 할 수 없습니다.
당신은 바위와 어려운 곳 사이에 갇혀 있습니다. 이미있는 것처럼 타임 스탬프 사이의 범위 검사를 수행하거나 쿼리의 모든 것을 가져 와서 스칼라에서 필터링합니다 (성능 비용이 많이 든다).
SqlFunction를 통해,
- 또한 기준에서 날짜 기능을 사용할 수 있습니다
최종 업데이트
당신이 참조하는 Linq에/NHibernate에 질문 참조하려면, 여기에 몇 가지 따옴표입니다 그것은 LINQ 공급자에 따라 달라집니다
- NHibernate LINQ 공급자가 지원하는 경우 잘 모르겠습니다 ...(로컬 모든 기록과 필터링을 가져 오는에 의해)의 DB에 아마도 자동으로 타격 성능을 날짜 강제 논리를 밀어 NHibernate에 의지
그래서 거기에 대한 대답이 될 것 같다 당신에 의존하지 수
- 하면 최상의 시나리오는 NHibernate에 타임 스탬프 범위 확인에 날짜/타임 스탬프 비교를 번역 할 수 있습니다 사용자 정의 SQL 로직
를 작성합니다. 이와 같은 것을하는 것은 Slick (그리고 매끄러운 joda-mapper)이 비교를 처리 할 수있는 방법에 대한 아주 깊은 질문입니다. 필터에서 사용한다는 사실은 우연입니다.
복잡한 버그를 만들 위험이 있으므로 극도로 같은 유용한 기능을 직접 작성해야합니다. 당신은 더 나을 것 :
- 분할 (어쩌면보기) 계산 된 열로 날짜를 추가하는 별도의 날짜/시간 열
- 에 열
- 사용자 정의 SQL (또는 저장된 프로 시저)를 사용하여 범위 고수 질의
- 위한 헬퍼 경우의 도우미 함수
를 사용
을 확인 :를 def equalsDate(dt: LocalDate) = {
val start = dt.toDateTimeAtStartOfDay()
val end = dt.plusDays(1).toDateTimeAtStartOfDay()
(col: Column[DateTime]) => {
col >= start && col < end
}
}
val isToday = equalsDate(LocalDate.now)
val todayLogItems = logItems.filter(x => isToday(x.MyDateTime))
그나마 사용하는 것을 잊지를 === 대신 총을주고 들어이 도움이 포인터가 될 수있다 of == – RoyB