2009-08-04 5 views
1

Oracle 데이터 소스를 사용하는 SSRS 보고서가 있습니다. 나는 질문이있다.SSRS의 Oracle 쿼리에 날짜 매개 변수 전달

select * from myTable t where 
t.date between Date '2009-08-01' and Date '2009-08-04' + 1 

이 쿼리는 Oracle 및 SSRS 모두에서 작동합니다. t.date 컬럼이 08/01/2009와 08/04/2009 사이 일 때 myTable에서 모든 행을 가져옵니다. t.date 열은 Date() 유형입니다.

이제 날짜를 매개 변수로 지정합니다. MyDate가 : 나는 SSRS에서이 쿼리를 실행하면

select * from myTable t where 
t.date between Date :myDate and Date :myDate + 1 

, 그것은 값을 입력하라고 프롬프트 : 그래서 난에 쿼리를 변경했습니다.

나는 2009-08-01을 시도했는데, '2009-08-01'은 oracle sql 처리 오류가 발생했습니다 : "누락 된 표현식".

아이디어가 있으십니까?

답변

2

하나의 매개 변수 (: myDate)가 있어야한다고 주장하면 with 절을 사용하면 프로세스가 조금 더 깨끗해집니다. 귀하의 예에서 사용한 구문 (예 : '날짜'와 같은 쿼리에서의 캐스팅)에 익숙하지 않습니다. 아래는 SQL 전용 구현입니다. 내가 훨씬 더 큰 쿼리와 비슷한 문제가 있었다

SELECT t.* 
FROM myTable t 
WHERE t.date between :myDate AND to_date(:myDate + 1) 
0

보고서 매개 변수 메뉴에서 매개 변수가 DateTime 유형 (기본적으로 문자열 임)인지 확인 했습니까?

+0

사용되는 구문이 문자열 변수 (예 : Date * string *)에 대한 것입니다. –

+0

올바르지 않습니다. IIRC 문제는 datetime 데이터 형식을 사용하여 해결되지 않습니다. 문제는 매개 변수 이름을 두 번 사용하는 것입니다. – ErikE

1

myDate를 두 번 사용해도 동일한 것은 아닙니다. 이들은 자리 표시 자이며 두 개의 자리 표시자를 가지고 있으므로 두 개의 값이 필요합니다.

+0

@Saobi - 내 경험상 정확합니다. 매개 변수를 반복 할 수 없기 때문에 Brian이 WITH 메서드를 사용하는 이유가 여기 있다고 생각합니다. 또는 myDate2로 만들고 동일한 SSRS 매개 변수를 다음과 같이 바인딩 할 수 있습니다. MyDate. – ErikE

1

이 나를 위해 사용 SSRS 근무 : TO_DATE (: mydate)가있는 mydate가 문제를 해결하기에 충분했습니다. 쿼리의 TO_DATE (: mydate)의 모든 인스턴스에 동일한 날짜가 전달되었습니다.

날짜 범위를 쿼리에 전달하려면 매개 변수에 다른 이름을 지정합니다. 예 : : StartDate 및 : EndDate를 SQL에 저장하고 보고서에 @StartDate 및 @EndDate 매개 변수가 별도로 있어야합니다. 이것은 SQL을 훨씬 명확하게 만듭니다.

0

, 나는 단순히 검색하고, 예를 들어 대체하는 것을 발견 :

with 
select TRUNC(TO_DATE(:mydate, 'yyyy-mm-dd')) p_date from dual as parameters 
select t.* 
from 
    myTable t, 
    parameters 
where 
    trunc(t.date) between parameters.p_date and parameters.p_date + 1