반응형
Oracle SQL의 변수를 통한 시간 간격 전달
이 쿼리는 주어진 인터벌 시간 10을 기준으로 값을 반환합니다.
SELECT TO_CHAR((TO_DATE('23:20:20','HH24:MI:SS') - INTERVAL '10' MINUTE), 'HH24:MI:SS')
FROM DUAL;
출력:
23:10:20
아래 코드를 사용하여 변수를 통해 이 분 간격을 전달하고자 합니다.
declare
test1 varchar(30);
begin
test1:=18;
SELECT TO_CHAR((TO_DATE('23:20:20','HH24:MI:SS') - INTERVAL ||test1|| MINUTE), 'HH24:MI:SS')
FROM DUAL;
end;
그러나 작동하지 않습니다. 오류는
PL/SQL: ORA-00904: "MINUTE": 잘못된 식별자
이 일을 좀 도와주십시오.감사합니다!
시도해 보기:
DECLARE
l_val NUMBER;
l_result VARCHAR2( 20 );
BEGIN
l_val := 10;
SELECT TO_CHAR( ( TO_DATE( '23:20:20', 'HH24:MI:SS' ) - INTERVAL '1' MINUTE * l_val ), 'HH24:MI:SS' ) INTO l_result FROM DUAL;
DBMS_OUTPUT.put_line( l_result );
END;
출력은 다음과 같습니다.
23:10:20
변수가 아닌 문자열 리터럴이어야 하므로 그렇게 할 수 없습니다.대신 이 기능을 사용할 수 있습니다.
declare
test1 number;
begin
test1:=18;
SELECT TO_CHAR(TO_DATE('23:20:20','HH24:MI:SS')
- NUMTODSINTERVAL(test1, 'MINUTE'), 'HH24:MI:SS')
INTO <something>
FROM DUAL;
end;
/
SQL Fiddle, 정말 간단한 기능 버전을 포함합니다.
사용해야 합니다.- NUMTODSINTERVAL( test1, 'MINUTE' )
그래서 당신의 진술은.
SELECT TO_CHAR((TO_DATE('23:20:20','HH24:MI:SS') - NUMTODSINTERVAL( test1, 'MINUTE' )), 'HH24:MI:SS' )
FROM DUAL;
변수를 사용한 Oracle Interval
- 이 게시물을 통해 제 사례에 대한 해결책을 찾을 수 있었습니다.
- 변수를 사용하고 싶어서 INTERVAL에 어려움을 겪었습니다.
- 결국 이것이 제 해결책이었습니다.
with VAR as
(select 1 as AMOUNT,
'hour' as UNIT
from DUAL)
select VAR.*,
SYSTIMESTAMP as ORIGIN,
SYSTIMESTAMP + interval '1' HOUR as LITERAL_INTERVAL,
TO_CHAR(SYSTIMESTAMP + NUMTODSINTERVAL(VAR.AMOUNT
,VAR.UNIT)) as VARIABLE_INTERVAL
from DUAL,
VAR;
언급URL : https://stackoverflow.com/questions/24883153/pass-time-interval-via-variable-in-oracle-sql
반응형
'programing' 카테고리의 다른 글
도커를 루트가 아닌 것으로 복사하려면 어떻게 해야 합니까? (0) | 2023.10.29 |
---|---|
사용자 지정 게시물 유형에 대한 읽기 설정에 정적 페이지 추가 (0) | 2023.10.29 |
SQL 다른 테이블을 기준으로 행 삭제 (0) | 2023.10.29 |
MySQL에서 부여 보기 (0) | 2023.10.24 |
MySQL의 대소문자 구분처럼 (0) | 2023.10.24 |