declare
max_tim varchar2(33);
min_tim varchar2(33);
begin
max_tim := select max(evetim) from cts_event where substr(clientid, 1,5) = '47621' and evedat='20170217';
min_tim := select min(evetim) from cts_event where substr(clientid, 1,5) = '47621' and evedat='20170217';
select round((max_tim - min_tim)*24) from dual;
end;
이렇게 짜봤는데 왜 에러가 나는지 모르겠어요
의도한건 하나의 테이블에 [가장오래전시간] - [가장최근시간] 뺀 시간차이를 구하려고했던거에요 ㅠㅠ
1. 변수에 값 대입할 때
- select 를 통한 변수에 값 대입은 Into 절을 이용합니다.
2. 변수마다 각각 쿼리하기 보다는
- 쿼리 하나로 두개 변수를 한번에 채울 수도 있습니다.
3. 컬럼을 가공하여 비교하는 것은 비효율입니다.
- 컬럼은 그대로 둔채 조건을 가공하여 비교하세요.
- 변경전 : substr(clientid, 1,5) = '47621'
- 변경후 : clientid LIKE '47621' || '%'
4. 문자열 빼기 연산으로는 시간 차를 구할 수 없습니다.
- date 나 timestamp 형을 이용해야 합니다.
- 형변환을 해야 하니 evetim 컬럼의 정확한 포멧을 알아야 합니다.