Oracle SQL 데이터베이스에서 실행되는 Business Objects를 사용하고 있습니다. PL 또는 모든 종류의 SQL 명령 줄에 액세스 할 수 없으며 데이터베이스에 대한 쓰기 권한이 없습니다. 쿼리를 하나의 명령으로 만 실행할 수 있으며 정의 된 열 집합을 출력해야합니다.Oracle SQL에서 날짜 (또는 문자열)로 사용자 프롬프트 전달
내가 같이 SQL에 나타나는 사용자 메시지에서 데이터 취할 수 있어요 : 내가 말할 수있는 예를 들어
@variable('Prompt1')
:이 충분히 쉽게
SELECT
A.SomeDate
FROM
A
WHERE
A.SomeDate BETWEEN @variable('Start') AND @variable('End Date')
. 그것은 작동한다; 사용자에게 날짜를 입력하도록 요청합니다. 그 (것)들을 포함하는 모든 성냥을 돌려 보낸다.
그러나 사용자는 Business Objects의 "Infoview"시스템을 사용하여 쿼리를 실행하고 프롬프트 시스템에 날짜 선택 도구가 표시됩니다. 기본적으로 날짜 부분 ("01/01/2016 12:00:00 AM ").
사용자가 시간 부분을 삭제하지 않으면 SomeDate 값이 선택한 시간을 벗어나면 레코드가 누락 될 수 있습니다. 예를 들어, 오늘의 모든 기록을 갖고 싶다면 기술적으로 00:00:00 (자정)에서 23:59:59 사이의 모든 것을 원합니다.
WHERE
A.SomeDate BETWEEN TRUNC(@variable('Start')) AND TRUNC(@variable('End Date'))
이 ... 그러나 이것은 컴파일 오류가 발생합니다 다음과 같이 정말 할 수 있도록하고 싶습니다 무엇
는 쿼리 변수 주위에 사용 TRUNC는 "일관성 데이터 유형 : 예상 날짜는 번호를 가지고 ". 오라클이 컴파일하기 전에 프롬프트를 숫자 데이터 유형으로 취급하는 이유를 모르겠습니다.
누구든지 @variable 값을 가져 와서 날짜 값을 잘라낼 수있는 것으로 변환 할 수있는 방법을 알고 있습니까?
따라서 저는이 문제를 해결하려고 노력하고 있습니다. 한 가지 염두에 두어야 할 것은 아마도 프롬프트 변수를 가져 와서 TO_DATE를 사용하여 명시 적으로 날짜로 변환 할 수 있다면입니다.
편집 : TRUNC는 효과가 없다고 지적했습니다. "12 : 00:00 AM "은 이미 자정입니다. 그러므로 나는 TRUNC를 잘못 이해했다고 생각한다. 그것이 자정까지 자르는 것처럼 보입니다. 나는 단순히 날짜 부분의 시간 부분을 단순히 제거했다고 생각 했었습니다. 즉, 00:00:00에서 23:59:59 사이에 언제든지 일치가 반환된다는 것을 의미합니다.
내가 원하는 것은 : 예를 들어, SomeDate에 시간대가 11:03 인 경우 End Date 프롬프트에서 해당 날짜 만 지정하면이 날짜가 포함되도록 어떻게해야합니까?
날짜 선택 도구가 항상 시간을 12:00:00 AM으로 전달하면 잘리는 것은 효과가 없습니다. 이미 자정에 있어요. –
@Alex Poole - 흠, 재미 있습니다. 그런 다음 SomeDate 값에 실제로 시간 부분이있는 경우 (예 : 11:02 등) 위의 예제를 간소화했지만 실제로 날짜를보고 싶습니다. 예를 들어, 11:02의 이벤트를 포함하여 오늘 일어나는 모든 이벤트를 나열하려면 "자정"검색을 사용하지 않습니다. 잘라내는 것은 시간 부분이 검색되지 않는다는 것을 의미 할 것이라고 생각했습니다. –
오라클 날짜에는 항상 시간이 있습니다. 제거 할 수 없습니다. 자정으로 설정하십시오. 기본적으로 trunc이 수행하는 것입니다. 따라서 시작일의 00:00:00과 종료일의 23:59:59 사이의 레코드를 일치 시키시겠습니까? –