2011-04-01 13 views
0

에서 특정 월에 태어난 모든 선수를 얻 나는 다음은SQLite는

_id INTEGER PRIMARY KEY, name text not null,birth_date date not null 

내가 나에게 특정 월에 태어난 모든 선수의 목록을 제공 할 수있는 쿼리를 원하는 속성이 포함 된 플레이어 테이블이 1986 년 5 월을 말하십시오.

이것은 어떻게 달성 될 수 있습니까? SQLite에서 제공하는 날짜 및 시간 함수를 사용했지만 사용하지 못했습니다.

모든 포인터가 감사하겠습니다.

감사

답변

4
SELECT p.name, p.birth_date 
    FROM Player p 
     WHERE p.birth_date > '1986-04-30' 
      AND p.birth_date < '1986-06-01'; 

(안된)

+0

두 번째 조건은 될 수있다 :'와 p.birth_date < '1986-06-01''. 날짜를 처리 할 때와 똑같지 만, 시간표를 사용하면 더 좋습니다. –

+0

그것이 원래의 상태 였지만 @Catcall이 내 대답을 편집하여 날짜를 올바르게 인용하면 가장자리 조건도 변경되었습니다. –

+0

예, 매트 볼의 가장자리 조건을 변경했습니다. 그는 원래'p.birth_date> 1986-04-30과 p.birth_date <1986-05-01'을 썼다. 지금 그가'<1986-06-01>을 의미했던 것을 봅니다. 나는 가벼운 터치를 미래에 사용하려고 노력할 것이다. :) –

2

나는이 일을해야 생각 . 나는 그것을 시도하지 않은 :

SELECT _id, name, birth_date 
FROM players 
WHERE strftime('%m',birth_date) = '05' AND strftime('%Y',birth_date) = '1986' 
+2

Matt Ball의 버전은 인덱스를 사용할 수 있습니다; 귀하의 버전은 각 행에 대해 두 번 strftime()을 평가해야합니다. 그것이 비판이 아니라 관찰입니다. 제가 다루는 사람들의 대부분은 이런 질문을 할 때 몇 달이나 몇 년이라는 관점에서 생각합니다. 그리고 나서 그들은 조정을 위해 저에게 일을 넘깁니다. –

+0

그래, 그 방법이 더 좋아. 나는 그 중 하나를 가지고있었습니다. 왜 그 순간을 생각하지 않았습니까? –

+0

호기심에서 벗어났다. '... 어디서 strftime ('% Y % m ', birth_date) ='1986 05''? –

0
SELECT p.name 
    , p.birth_date 
FROM Player p 
WHERE p.birth_date >= '1986-05-01' 
    AND p.birth_date < date('1986-05-01','+1 month') 
;