2012-11-28 3 views
3

데이터베이스가 아닌 배경에서 왔습니다. 내가 필드 데이터 형식 중 하나가있는 테이블을 만들었습니다.sqlite3의 날짜 처리가 혼란 스럽습니다.

dataF TEXT 

INSERTION :

이 값으로 세 개의 레코드를 삽입 :

'842-2-4' 
'842-2-5' 
'842-2-6' 

선택 :

트링 현재 날짜를 기준으로 기록을 얻을 수 있습니다.

... where dateF between '842-2-4' and '842-2-10' 

실패했습니다. 반면

,

... where dateF between '842-2-4' and '842-2-8' 

모든 3 개 개의 레코드를 검색한다.

내가 뭘 잘못하고 있니? 첫 번째 문장이 실패하는 이유는 무엇입니까?

친절히 제안합니다.

답변

1

...

하나 개의 문자열이 다른, 당신은 종류의이 비교되는 짧은으로

...

'842-2-4' 
'842-2-1' 

글쎄, 아무 것도 없습니다 >= '842-2-4'<= '842-2-1'입니다.

  • '842-2-1''842-2-4' 앞에 오는 때문입니다.
  • 그리고 '842-2-10''842-2-4' 앞에옵니다.그냥 'Squiggled'으로

  • 'Squiggly'

  • 전에 와서 'xxx-y-az' 당신이 원하는대로 비교하기 'xxx-y-z'


앞에 오는대로, 모든 날짜가 채워져 있는지 확인하십시오 0 님의 답변입니다.

BETWEEN '0842-02-04' AND '0842-02-10' 

그러나 당신이 너무 테이블에있는 값을 패딩 한 후 그에만 작동합니다.


편집 : 또한

당신의 형식 YYYY-MM-DD입니다를 가정합니다. 문자열이 왼쪽에서 오른쪽으로 비교 될 때 의 왼쪽에서 최대 크기 값을 가져야합니다.

는 (이것은 당신이 당신이 그들을 원하는 것처럼 기본 문자열 비교가 작동하지 사용 YYYY-DD-MM 여전히 수 있음을 의미한다.)

+0

필자는 '0'을 채우려고했지만 여전히 같은 결과를 보았습니다 : ( – Whoami

+0

@Whoami - 테이블의 데이터를 수정 했습니까? 예제를 사용하여 '0842-02-04', '0842- 02-05''과''0842-02-06'' 그리고 *** *** ***은 정확히 동일한 데이터 형식을 사용하도록 쿼리를 수정합니다 :'dateF BETWEEN '0842-02-04 AND'0842-02 -10''. * (테이블의 데이터와 검색 매개 변수 ** 모두 ** 동일한 ** 형식이어야합니다.) * – MatBailie

+0

예, 동일 함 – Whoami

3

문자열을 날짜가 아닌 비교하기 때문에. 컴퓨터는 이들이 날짜라는 것을 모릅니다. 날짜를 저장하고 날짜 비교를 수행하거나 문자열을 분석하기 위해 자체 논리를 구현해야합니다.

간단히 말해, 10보다 1이 더 가치가있는 것이 아니라 10보다 작은 것으로보고 있습니다. 그것은 날짜가 아닌 문자열 비교입니다.

sqlite는 날짜 유형을 지원하지 않지만 처리하기위한 함수를 가지고 있습니다. 여기를 참조하십시오 :

http://www.sqlite.org/lang_datefunc.html

문자열을 비교할 때, 값이 왼쪽에서 오른쪽으로 비교되며,
+0

SQLite는 네이티브 날짜 데이터 형식이 없습니다. –

+0

내가 어떻게 날짜 형식으로 삽입합니까? – Whoami

+0

수정 된 답변, 도움이 필요한 링크를 참조하십시오. – HackyStack

관련 문제