반응형
통계 쿼리를 작성하다 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 |