2014-12-03 1 views
4

YYYYMMDD 형식의 정수 필드가 있으며 특정 달의 모든 레코드를 반환하고 싶습니다. NSPredicate 내에서이 산술 연산을 수행하여 최적화 된 검색을 위해 SQL로 변환하는 방법이 있습니까?마지막 x 자릿수를 확인하여 정수 필드 쿼리

기본적으로 작업을 수행해야합니다 : (identifier - floor(identifier/100) * 100) == day 또는 identifier % 100 == day (빠른 비교가 끝나는 쪽) NSPredicate에서 작동하지 않는 것 같습니다. 술어에서 수학 연산을 수행하는 것처럼 보이지 않습니다.

또는 필드를 쿼리 내에서 문자열로 변환 할 수있는 방법이 있습니까? ENDSWITH를 사용할 수 있습니까?

sqlite 스토어이기 때문에 일부 비교 함수 (주로 블록)를 사용할 수 없다고 생각합니다. 메모리 내에 저장되어 있기 때문입니다.

이 작업을 효율적으로 수행하는 방법에 대한 정보는 크게 감사하겠습니다. 당신이 정말로 제로 시간 기준으로 날짜 객체로 그 처리해야하기 때문에 어려운 장소에

+0

왜 날짜 형식으로 날짜 데이터를 보관하지 않으십니까? – stark

+0

이 날짜 식별자는 애플리케이션 전반에 걸쳐 표준화되어 사용되며 벽시계 날짜 (즉, 신기원의 시점이 아닌)이며 시간이 없습니다. 정수는 무엇을 나타내는 지에 관계없이 여전히 문제가 남아 있습니다. 우리는 정수의 마지막 x 자리를 기반으로 효율적으로 쿼리해야합니다. – Steve

+0

@Rob 슬프게도 나는 당신이 SQLite 스토어에서 predicateWithBlock을 사용할 수 있다고 생각하지 않는다. – Steve

답변

2

나는 ENDSWITH 구문을 시도 할 것입니다.

SQLite는 숫자 형식과 문자열 형식을 상당히 투명하게 변환하는 경향이 있습니다.

+1

아,이 값은 문자열과 비교할 때 다른 정수가 아닌 한 작동합니다. 그래서'x ENDSWITH 25'는 작동하지 않지만'x ENDSWITH "25"'는 작동합니다. 감사! – Steve

2

, 그 다음 인생이 꽤 쉬울 것이다 단지 문자열 인 경우 두 번째 옵션에서 등

.

정수로 사용하면 술어가 거칠어집니다.

그냥 엉덩이에서 촬영하지만 문자열로 치료 해보려고 했습니까? SQLite는 Core Data가 그것에 대해 불평 할지라도 정말로 신경 쓰지 않습니다.

기존 앱입니까, 아니면 데이터 모델을 변경할 수 있습니까?

+0

우리는 데이터 모델을 변경할 수 있지만 NSDate 값으로 작업하는 것은 비실용적입니다. 값을 날짜 구성 요소로 바꾸고 앱 전반에 걸쳐이를 사용하므로 정수는 날짜 구성 요소를 인코딩하는 가장 효율적이며 효율적인 방법입니다. 그러나 그것을 문자열처럼 취급하고 다른 문자열과 비교하는 것은 정말로 효과가 있습니다. 엉덩이에서 좋은 샷입니다! – Steve

관련 문제