본문 바로가기

db/oracle

oracle 10초 마다 저장 하기[통계]

반응형

통계 쿼리를 작성하다 10초마다 저장을 해야 하는 경우가 생김

쿼리 양이 많아 10초마다 저장 시 저장 시간이 10초 단위로 저장 되지 않아 아래 처럼 처리 함

 

 

TO_CHAR(SYSDATE, 'SS')는 현재 시간의 '초'만 두 자리 숫자로 반환합니다. 이 값을 10초 단위로 버림하려면, 단순히 초 단위 값을 10으로 나눈 후 소수점을 버리고 다시 10을 곱하는 수학적 연산을 사용해야 합니다.

아래 쿼리는 SYSDATE를 기준으로 초 값을 10초 단위로 절삭합니다.

SELECT TO_CHAR(SYSDATE, 'HH24:MI:') ||
       LPAD(TRUNC(TO_CHAR(SYSDATE, 'SS') / 10) * 10, 2, '0') AS "10초 단위 시간"
FROM DUAL;

쿼리 설명

  • TO_CHAR(SYSDATE, 'HH24:MI:'): 현재 시간에서 '시'와 '분'을 'HH24:MI:' 형식으로 문자열을 만듭니다.
  • TRUNC(TO_CHAR(SYSDATE, 'SS') / 10): 현재 시간의 초('SS')를 가져와 10으로 나눈 뒤 소수점을 버려 10초 단위 정수를 만듭니다. 예를 들어, 현재 초가 47초라면 47/10 = 4.7이 되고, TRUNC를 적용하면 4가 됩니다.
  • * 10: 앞서 얻은 정수 값에 다시 10을 곱하여 '40초'와 같은 10초 단위의 값을 만듭니다.
    LPAD(..., 2, '0'): 계산된 초 값(예: 0, 10, 20...)을 두 자리로 만들고, 한 자리 숫자일 경우 앞에 '0'을 채워 넣습니다.
  • ||: HH24:MI: 문자열과 10초 단위 초 값을 결합하여 최종적으로 "시:분:초" 형태의 결과를 반환합니다.
SELECT 
	TO_CHAR(SYSDATE, 'yyyy') "년도",
	TO_CHAR(SYSDATE, 'mm') "월",
	TO_CHAR(SYSDATE, 'dd') "일",
	TO_CHAR(SYSDATE, 'HH24') "시간",
	TO_CHAR(SYSDATE, 'MI') "분",
    LPAD(TRUNC(TO_CHAR(SYSDATE, 'SS') / 10) * 10, 2, '0') AS "10초 단위 시간"
FROM DUAL;

 

반응형

'db > oracle' 카테고리의 다른 글

union all union 차이점  (0) 2025.09.13
oracle ORA-32044  (0) 2025.09.13
Oracle 카멜 변환 INITCAP  (0) 2025.04.05
Oracle 대문자 변경, 소문자 변경  (0) 2025.04.05
[Oracle] NUMBER 데이터 타입  (0) 2025.03.21