티스토리 뷰

오라클에서 날짜 컬럼 간의 차이 계산하기

오라클 데이터베이스에서 두 날짜 컬럼 간의 차이를 계산하는 방법에 대해 알아보겠습니다. 예를 들어, 두 날짜 간의 일(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` 함수를 사용하여 필요한 부분을 추출하는 방법을 배웠습니다. 이를 통해 다양한 날짜 연산을 효과적으로 수행할 수 있습니다.

최근에 올라온 글