1

좋아요, 제 질문의 첫 번째 부분에 답이 있습니다. 두 번째 부분은 여기에 있습니다. :-) PLSQL 쿼리에서, 나는 다음과 같다 기준이 있습니다Oracle 쿼리의 함수 호출에서 datetime 연산 수행

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) 
    and Doc3.clinicalDate < ml.convert_date_to_id(:DateEnd) 

을 지금을, 내가 사용하지 않습니다 DateEnd 자체 - 그래서 내가 일일를 추가 할이이 날짜를 비교할 때 자정까지, 자정에 다음 일이 걸립니다. 불행하게도, 내가

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) 
    and Doc3.clinicalDate < ml.convert_date_to_id(:DateEnd + 1) 

을 할 때 얻을 "ORA-06553을 : PLS-306 : 잘못된 번호 또는 'CONVERT_DATE_TO_ID'에 대한 호출에서 인수의 유형". ": DateEnd + interval '1 day"는 "ORA-30081 : datetime/interval 산술 연산에 대해 유효하지 않은 데이터 유형"을 표시합니다 (여기서 : DateEnd는 2012 년 5 월 31 일에 바인딩됩니다). "convert_date_to_id (add_months (: DateEnd, 1))"을 수행하면 정상적으로 작동합니다. 이견있는 사람? 감사.

ETA :이 보고서는 SSRS 2008 R2 프로젝트이고 DateBeginDateEnd은 DateTime 매개 변수로 보고서 매개 변수에 정의되어 있습니다. 현재 해결 방법은 :DateEnd 검색어 매개 변수를 @DateEnd 보고서 매개 변수 + 1과 동일하게 설정하는 것이지만 언젠가는이를 올바르게 문서화하는 것을 잊어 버리고 보고서를 유지하려고하는 사람을 혼동하는 것을 혼란스럽게합니다. 나를). I 은 앞에서 제안한 것처럼 문자열 매개 변수를 전달하려고하지 않습니다.

+0

어떤 데이터 유형 'clinicalDate'이며,'convert_date_to_id'에 대한 매개 변수와 리턴 타입은 무엇입니까? –

+0

FUNCTION Convert_Date_to_ID (일자 IN 날짜) 반환 값 : BEGIN RETURN (thedate-to_date ('01/01/1960 ','mm/dd/yyyy ')) * 1000000 * 86400; END; – SarekOfVulcan

답변

2

나는 매개 변수가 날짜 시간되는 것은 문제의 뿌리라고 생각하고 있어요. Microsoft DateTime 데이터 유형은 분수 초를 지원하고 오라클 DATE 형식은 지원하지 않는다는 점에서 오라클보다 더 세밀합니다 (Oracle TIMESTAMP는 그렇습니다).

ADD_MONTHS는 DATE 데이터 유형 (전달 된 TIMESTAMP는 DATE가 됨)에 전달 된 모든 내용을 반환합니다. 그래서 어쩌면 당신은 매개 변수를 변환하고 날 그런 식으로 추가 할 수 있습니다 또는

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) 
    and Doc3.clinicalDate < ml.convert_date_to_id(CAST(:DateEnd as DATE)+1) 

을, 매개 변수에 대한 변환 및 날짜 산술 잊고 두 번째 clinicalDate에서 하루를 빼기 :

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) 
    and Doc3.clinicalDate - 1 < ml.convert_date_to_id(:DateEnd) 
+0

두 번째 것은 작동하지 않습니다. - clinicalDate는 편집을 만든 워크 스테이션과 관련된 ID를 포함하여 이상한 엉덩이 타임 스탬프입니다. 첫 번째 제안을 확인해 보겠습니다. 감사! – SarekOfVulcan

+0

그래, 그게 효과가 있었고, 내가 원했던 곳으로 전환을 넣었다. 확인해야 할 장소가 많을수록, 내가 놓칠 기회가 많아졌다. :-) – SarekOfVulcan

0

to_date을 사용하여 값을 변환하십시오. 예를 들어

select &date + 1 from dual 

'29-may-2012' 알리는

미세 to_date('29052012','ddmmyyyy') 작품 알리는 것은 ORA-01722: invalid number

2

ml.convert_date_to_id 입력 매개 변수가 아닌 날짜를 나타내는 VARCHAR2 같은 DATE을 취한다고 가정하고, 가정주는 :DateEnd 그 바인드 변수가 VARCHAR2이면

과 같은 것이 필요합니다.

또는

ml.convert_date_to_id(to_date(:DateEnd, 'DD-MON-YYYY') + interval '1' day) 
+0

SSRS에서이 쿼리를 사용할 때 데이터 집합 매개 변수가 날짜로 정의 된 보고서 매개 변수에 바인딩되어있어 바인딩이 어떻게 작동하는지 잘 모르지만 varchar로 생각하지 않습니다. – SarekOfVulcan