programing

Oracle SQL의 변수를 통한 시간 간격 전달

instargram 2023. 10. 29. 18:59
반응형

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

반응형