2017-10-30 26 views
1

날짜 열 potatoe 날짜를 포함하는 테이블 테스트가 있습니다. 이 칼럼에서 날짜별로 쿼리하여 레코드를 가져 오려고합니다. 내가 X .AA.AAAA에 Y .AA.AAAA에서 날짜별로 조회 할 때 그리고, 항상 (X-1) .AA.AAA에 Y .AA.AAAA에서 레코드를 얻었다. 예를 들어, 01.10.2017에서 30.10.2017로 검색하지만 범위는 01-29.10.2017입니다.Postgres : 필터 날짜 범위에 의한 SQL 쿼리

내가 아는 모든 것을 시도하지만 이벤트 하위 쿼리는 아무 도움이되지 않습니다. 내 시도 :

Select n1.potatoeDate 
    FROM (SELECT potatoeDate from test WHERE potatoeDate > '2017/05/07'::date) n1 
    WHERE n1.potatoeDate <= '2017/05/08'::date; 

    select * 
    from test 
    where potatoeDate between '2017/05/07' and '2017/05/08' 

    SELECT potatoeDate from test 
    where 
    potatoeDate >= '2017/05/07' AND 
    potatoeDate <= '2017/05/08' 

--little hack 
    SELECT potatoeDate from test 
    WHERE 
    potatoeDate >= '2017/05/07'::date 
    AND 
    potatoeDate <= ('2017/05/08'::date)+1; 

마지막 작은 해킹 쿼리 작업입니다. : |

나를 도와 줄 사람이 있습니까? :)

+0

는'potatoeDate'는'유형 timestamp'하지입니까? 그것은 행동을 설명 할 것입니다 – Adam

+0

예. 이유를 설명해 주시겠습니까? – newOne

+0

내 대답보기. 명확하지 않은 경우 알려주세요. – Adam

답변

2

potatoeDatetimestamp입니다.

datetimestamp을 비교하면 timestamp은 단지 1 초 밖에 걸리지 않는다면 더 크다 (나중에 나타납니다). datetimestamp 번으로 전송하고 시간 입력란에 00:00:00이 있는지 확인하세요. 따라서 00:00:00과 다른 시간 인 timestamp은 더 커집니다.

+0

사실, 당신 말이 맞아요! 유일한 해결책은 전체 시간 소인을 추가하여 흥미로운 시간 범위로 쿼리하는 것입니다. 다른 방법으로 해결하는 법을 알고 있습니까? 의미 : 예 : _ 위치 : '2017/05/07':> 타임 스탬프 및 '2017/05/08 23 : 59 : 59'_ – newOne

+0

날짜 범위를 제한하는 데 관심이 있다면 (potatoeDate <('2017/05/08':: date) +1;'), 또는 더 우아한'+ INTERVAL '1 day'' . – Adam

+0

아담 내 게시물을 참조하십시오, 나는 연결보다 더 나은 솔루션을 발견. 도움을 주셔서 감사합니다 :) – newOne

1

해결책 (@Adam의 정보가 도움이 됨)을 발견했습니다. :)

날짜 유형에 열 이름을 캐스팅해야합니다. 변경되면 모든 쿼리가 예상 된 결과를 반환합니다.

예 :

select * 
from test 
where potatoeDate::date between '2017/05/07' and '2017/05/08' 

SELECT potatoeDate from test 
where 
potatoeDate::date >= '2017/05/07' AND 
potatoeDate::date <= '2017/05/08' 
+0

글쎄, 쓰기 쉽지만 데이터베이스로 평가하는 것이 더 비쌉니다. 나는 그 일을하지 않을 것입니다 ... – Adam

+0

DB는 모든 레코드를 날짜 형식으로 변환해야하므로 더 비쌉니다. 간단한 연결은이 상황에서 더 효과적입니다. – newOne