2011-03-29 2 views
0

PL/SQL에서 SQL 쿼리를 작성하여 날짜를 기준으로 레코드를 필터링해야합니다. 필드는 날짜/시간 유형이지만, 내가 생각한 시간에 대해서는별로 신경 쓰지 않기 때문에 where 절에서 생략 할 것입니다.vs> startdate와 <= enddate 사이의 SQL

그래서 나는 월에 대한 모든 기록을 얻으려면

 
WHERE 
    f.logdate between to_date('2011/01/01', 'yyyy/mm/dd') and 
        to_date('2011/01/31', 'yyyy/mm/dd') 

같은 것을 쓰고 있어요. 나는이 나의 최종 결과는 내가 무엇을 기대하지

 
WHERE 
    f.logdate >= to_date('2011/01/01', 'yyyy/mm/dd') and 
    f.logdate <= to_date('2011/01/31', 'yyyy/mm/dd') 

에 상응하는 그러나 예정이다 읽어 보시기 바랍니다 : 내가 명시 적으로 경계를 명시 할 때보다 키워드 사이를 사용할 때 적은 레코드가 있습니다. 그 사이의 내 가정이 잘못 되었기 때문에 그것이 아닙니까?

EDIT : ah nvm, 날짜가 문제가 아닌 것으로 보입니다. 내가 사용하고있는 부속 질의가 그 결과를 날짜로 필터링하고 있었고 날짜/시간을 지정하지 않고있는 동안에도있었습니다.

+0

BETWEEN이 어떻게 작동하는지 보여줍니다. 가급적 전체 시간 및 날짜가 표시된 출력물을 게시 할 수있는 작은 샘플로 재생산 할 수 있습니까? –

+0

쿼리에 OR 구문을 사용하여 작업 순서에 영향을 줄 수 있습니까? –

+0

@Bill 불행히도 내가 언젠가는 그것을 줄이면 여전히 많은 레코드가있는 것처럼 보인다. @PMV : 유일한 조건입니다. – MxyL

답변

2

당신은 "logdate"필드의 종류 (은 SQL이 도울 수있는 문장을 만들 수)를 보여 주시겠습니까?

일부 데이터베이스의 경우 날짜 유형은 실제로 datetime 필드이므로 "Jan 01 2011"다음에 날짜를 찾는 경우 실제로 "Jan 01 2011 12:00:00 p.m."이후의 날짜를 찾고 있습니다.

귀하의 경우 일 수 있습니다.

+0

맞습니다. 시간도 문제를 일으키고있었습니다. 시작과 종료 시간도 지정해야합니다. – MxyL

1

시간이 0:00 또는 이상하게 설정되면 제대로 작동하지 않습니다.

The query retrieves the expected rows because the date values in the query and the datetime values stored in the RateChangeDate column have been specified without the time part of the date. When the time part is unspecified, it defaults to 12:00 A.M. Note that a row that contains a time part that is after 12:00 A.M. on 1998-0105 would not be returned by this query because it falls outside the range. 

http://msdn.microsoft.com/en-us/library/ms187922.aspx

+1

이것이 대답인지는 모르지만 질문은 Oracle에 관한 것이지만 T-SQL 설명서를 참조한 것입니다. –

+0

사실이지만 데이터베이스는 비슷하게 작동합니다. 나는 이것이 어느 쪽이든을위한 causa일지도 모르다는 것을 생각했다. – m4tt1mus

관련 문제