티스토리 뷰
오라클에서 날짜 컬럼 간의 차이 계산하기
오라클 데이터베이스에서 두 날짜 컬럼 간의 차이를 계산하는 방법에 대해 알아보겠습니다. 예를 들어, 두 날짜 간의 일(day), 시간(hour), 분(minute)을 각각 구하는 방법을 단계별로 설명하겠습니다. 이번 포스트에서는 `CAST` 함수를 사용하여 컬럼을 변환하는 방법도 함께 다루겠습니다.
1. 날짜 간의 일수 차이 계산
날짜 간의 일수 차이를 계산하는 것은 가장 간단합니다. 오라클에서는 두 날짜를 직접 빼면 일수 차이가 계산됩니다. 이때 결과를 `NUMBER` 형식으로 `CAST`할 수 있습니다.
SELECT
DATE1,
DATE2,
CAST(DATE2 - DATE1 AS NUMBER) AS DAY_DIFF
FROM
YOUR_TABLE;
```
위 쿼리에서는 `DATE1`과 `DATE2` 컬럼 간의 일수 차이를 계산하여 `DAY_DIFF`라는 컬럼에 저장합니다. `CAST` 함수를 사용하여 결과를 명시적으로 `NUMBER` 형식으로 변환합니다.
2. 날짜 간의 시간 차이 계산
날짜 간의 시간 차이를 계산하려면, 두 날짜 간의 차이를 시, 분, 초 단위로 변환한 후 시간을 구해야 합니다. 이를 위해 `EXTRACT` 함수와 `CAST` 함수를 사용합니다.
SELECT
DATE1,
DATE2,
CAST(
EXTRACT(HOUR FROM (CAST(DATE2 AS TIMESTAMP) - CAST(DATE1 AS TIMESTAMP)) DAY TO SECOND) +
EXTRACT(DAY FROM (CAST(DATE2 AS TIMESTAMP) - CAST(DATE1 AS TIMESTAMP)) DAY TO SECOND) * 24
AS NUMBER) AS HOUR_DIFF
FROM
YOUR_TABLE;
```
이 쿼리는 두 날짜 간의 차이를 `DAY TO SECOND`로 변환한 후, 시간 부분을 추출하여 계산합니다. 일 부분을 24로 곱하여 시간으로 변환하고, 시간 부분을 더한 후 `NUMBER` 형식으로 `CAST`합니다.
3. 날짜 간의 분 차이 계산
날짜 간의 분 차이를 계산하려면, 시간 단위와 분 단위를 합산해야 합니다. 마찬가지로 `EXTRACT` 함수와 `CAST` 함수를 사용합니다.
SELECT
DATE1,
DATE2,
CAST(
(EXTRACT(HOUR FROM (CAST(DATE2 AS TIMESTAMP) - CAST(DATE1 AS TIMESTAMP)) DAY TO SECOND) * 60) +
EXTRACT(MINUTE FROM (CAST(DATE2 AS TIMESTAMP) - CAST(DATE1 AS TIMESTAMP)) DAY TO SECOND) +
(EXTRACT(DAY FROM (CAST(DATE2 AS TIMESTAMP) - CAST(DATE1 AS TIMESTAMP)) DAY TO SECOND) * 24 * 60)
AS NUMBER) AS MINUTE_DIFF
FROM
YOUR_TABLE;
```
이 쿼리는 두 날짜 간의 차이를 `DAY TO SECOND`로 변환한 후, 시간 부분을 분으로 변환하고, 일 부분도 분으로 변환하여 모두 합산한 후 `NUMBER` 형식으로 `CAST`합니다.
전체 쿼리 예시
위의 방법들을 모두 합쳐서 하나의 쿼리로 작성할 수 있습니다. 예를 들어, 두 날짜 간의 일수, 시간, 분 차이를 모두 구하고 싶다면 다음과 같이 작성할 수 있습니다.
SELECT
DATE1,
DATE2,
CAST(DATE2 - DATE1 AS NUMBER) AS DAY_DIFF,
CAST(
EXTRACT(HOUR FROM (CAST(DATE2 AS TIMESTAMP) - CAST(DATE1 AS TIMESTAMP)) DAY TO SECOND) +
EXTRACT(DAY FROM (CAST(DATE2 AS TIMESTAMP) - CAST(DATE1 AS TIMESTAMP)) DAY TO SECOND) * 24
AS NUMBER) AS HOUR_DIFF,
CAST(
(EXTRACT(HOUR FROM (CAST(DATE2 AS TIMESTAMP) - CAST(DATE1 AS TIMESTAMP)) DAY TO SECOND) * 60) +
EXTRACT(MINUTE FROM (CAST(DATE2 AS TIMESTAMP) - CAST(DATE1 AS TIMESTAMP)) DAY TO SECOND) +
(EXTRACT(DAY FROM (CAST(DATE2 AS TIMESTAMP) - CAST(DATE1 AS TIMESTAMP)) DAY TO SECOND) * 24 * 60)
AS NUMBER) AS MINUTE_DIFF
FROM
YOUR_TABLE;
```
이 쿼리는 `YOUR_TABLE` 테이블에서 `DATE1`과 `DATE2` 컬럼의 차이를 각각 일수, 시간, 분 단위로 계산하여 `DAY_DIFF`, `HOUR_DIFF`, `MINUTE_DIFF`라는 컬럼으로 반환합니다.
결론
오라클에서 날짜 컬럼 간의 차이를 일수, 시간, 분 단위로 계산하는 방법을 알아보았습니다. `CAST` 함수를 사용하여 명시적으로 형변환을 수행하고, `EXTRACT` 함수를 사용하여 필요한 부분을 추출하는 방법을 배웠습니다. 이를 통해 다양한 날짜 연산을 효과적으로 수행할 수 있습니다.
'SQL for business_응용' 카테고리의 다른 글
SQL_응용_PIVOT 함수 활용 예제 (0) | 2024.08.25 |
---|---|
SQL_응용_생년월일기준으로 특정시점 기준 만나이 구하는 법 (0) | 2024.08.07 |
SQL_응용_row_number() 사용법 (0) | 2024.07.29 |
SQL_응용_LISTAGG 함수_여러 행을 한 행으로 정렬 (0) | 2024.07.27 |
SQL_응용_UNION 병합 함수 (0) | 2024.07.01 |