데이터베이스

데이터베이스별 날짜 "00일 00시간 00분" 형식으로 출력

♠디지털 모험일지♠ 2024. 12. 11. 15:22
728x90
반응형
SMALL

1. Oracle

SQL:

SELECT 
    TRUNC(SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD')) || '일 ' ||
    TRUNC(MOD((SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD')) * 24, 24)) || '시간 ' ||
    TRUNC(MOD((SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD')) * 24 * 60, 60)) || '분' AS difference
FROM DUAL;

설명:

  1. 날짜 차이 계산: SYSDATE - TO_DATE(...)는 기본적으로 day 단위 차이를 반환.
  2. 시간 추출: (차이 * 24) % 24로 시간 값을 추출.
  3. 분 추출: (차이 * 24 * 60) % 60으로 분 값을 추출.
  4. 최종적으로 || 연산자를 사용하여 문자열 결합.

결과:

10일 12시간 30분

2. MySQL

SQL:

SELECT CONCAT(
    FLOOR(TIMESTAMPDIFF(MINUTE, '2024-12-01 00:00:00', NOW()) / 1440), '일 ',
    FLOOR(MOD(TIMESTAMPDIFF(MINUTE, '2024-12-01 00:00:00', NOW()) / 60, 24)), '시간 ',
    MOD(TIMESTAMPDIFF(MINUTE, '2024-12-01 00:00:00', NOW()), 60), '분'
) AS difference;

설명:

  1. 전체 분 단위 차이 계산: TIMESTAMPDIFF(MINUTE, ...)로 전체 분 차이를 계산.
  2. 일(day) 계산: 전체 분 / 1440 (1일 = 1440분).
  3. 시간(hour) 계산: (전체 분 / 60) % 24.
  4. 분(minute) 계산: 전체 분 % 60.
  5. CONCAT를 사용하여 문자열로 결합.

결과:

10일 12시간 30분

3. SQL Server

SQL:

WITH TimeDiff AS (
    SELECT 
        DATEDIFF(MINUTE, '2024-12-01 00:00:00', GETDATE()) AS total_minutes
)
SELECT 
    CAST(total_minutes / 1440 AS VARCHAR) + '일 ' +
    CAST((total_minutes / 60) % 24 AS VARCHAR) + '시간 ' +
    CAST(total_minutes % 60 AS VARCHAR) + '분' AS difference
FROM TimeDiff;

설명:

  1. WITH 절로 총 분 계산: DATEDIFF(MINUTE, ...)를 사용해 전체 분 계산.
  2. 일(day), 시간(hour), 분(minute) 계산
    • : total_minutes / 1440.
    • 시간: (total_minutes / 60) % 24.
    • : total_minutes % 60.
  3. :
  4. + 연산자로 문자열을 결합.

결과:

10일 12시간 30분

4. PostgreSQL

SQL:

WITH TimeDiff AS (
    SELECT EXTRACT(EPOCH FROM NOW() - '2024-12-01 00:00:00') AS total_seconds
)
SELECT 
    FLOOR(total_seconds / 86400) || '일 ' || 
    FLOOR((total_seconds % 86400) / 3600) || '시간 ' ||
    FLOOR((total_seconds % 3600) / 60) || '분' AS difference
FROM TimeDiff;

설명:

  1. 초(second) 단위 계산: EXTRACT(EPOCH FROM ...)를 사용해 전체 초 단위 차이를 계산.
  2. 일(day), 시간(hour), 분(minute) 계산
    • : total_seconds / 86400 (1일 = 86400초).
    • 시간: (total_seconds % 86400) / 3600.
    • : (total_seconds % 3600) / 60.
  3. :
  4. || 연산자를 사용해 문자열로 결합.

결과:

10일 12시간 30분

5. SQLite

SQL:

SELECT 
    CAST((JULIANDAY('now') - JULIANDAY('2024-12-01')) AS INT) || '일 ' ||
    CAST(((JULIANDAY('now') - JULIANDAY('2024-12-01')) * 24) % 24 AS INT) || '시간 ' ||
    CAST(((JULIANDAY('now') - JULIANDAY('2024-12-01')) * 24 * 60) % 60 AS INT) || '분' AS difference;

설명:

  1. JULIANDAY로 날짜 차이 계산: JULIANDAY('now') - JULIANDAY(...)는 소수점 포함 날짜 차이를 반환.
  2. 일(day), 시간(hour), 분(minute) 계산
    • : (JULIANDAY('now') - JULIANDAY(...))의 정수 부분.
    • 시간: (차이 * 24) % 24.
    • : (차이 * 24 * 60) % 60.
  3. :
  4. || 연산자를 사용해 문자열 결합.

결과:

10일 12시간 30분

비교 요약

DB SQL 문법 결과 예제
Oracle TRUNC(days)MOD(days * 24, 24) 활용 10일 12시간 30분
MySQL CONCATTIMESTAMPDIFF 활용 10일 12시간 30분
SQL Server DATEDIFFCAST를 조합해 일/시간/분 계산 10일 12시간 30분
PostgreSQL EXTRACT(EPOCH FROM ...)를 사용해 초 단위 계산 후 나눗셈 및 나머지 계산 10일 12시간 30분
SQLite JULIANDAY와 산술 연산으로 일/시간/분 계산 10일 12시간 30분

추가 팁

  1. 타임존 고려:
    • 시간이 UTC 또는 로컬 타임인지 확인 후 변환이 필요할 수 있습니다.
    • PostgreSQL: AT TIME ZONE을 사용.
    • MySQL: CONVERT_TZ() 활용.
  2. 포맷 출력 사용자 정의:
    • 일부 데이터베이스에서는 날짜 차이를 직접 계산하지 않고, 언어별 애플리케이션에서 처리하도록 데이터를 반환하기도 합니다.

2024.12.11 - [데이터베이스] - 데이터베이스별 두 날짜 간 차이를 문자열로 반환 : 예시 코드

 

데이터베이스별 두 날짜 간 차이를 문자열로 반환 : 예시 코드

1. OracleSQL 예제:SELECT TO_CHAR(SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD'), '9999') || ' days' AS difference_textFROM DUAL;시간과 분까지 포함:SELECT FLOOR(SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD')) || ' days, ' || FLOOR((SYSDATE - TO_DATE

alswnsghd1234.tistory.com

2024.12.11 - [데이터베이스] - 데이터베이스별 두 날짜 간의 차이 계산 : 예시코드

 

데이터베이스별 두 날짜 간의 차이 계산 : 예시코드

1. OracleSQL:SELECT SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD') AS days_difference, (SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD')) * 24 AS hours_difference, (SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD')) * 24 * 60 AS minutes_differenceFROM DUAL;결과

alswnsghd1234.tistory.com

 

반응형
SMALL