데이터베이스

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

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

1. Oracle

SQL 예제:

SELECT TO_CHAR(SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD'), '9999') || ' days' AS difference_text
FROM DUAL;

시간과 분까지 포함:

SELECT 
    FLOOR(SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD')) || ' days, ' ||
    FLOOR((SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD')) * 24) || ' hours, ' ||
    FLOOR((SYSDATE - TO_DATE('2024-12-01', 'YYYY-MM-DD')) * 24 * 60) || ' minutes' AS difference_text
FROM DUAL;

결과 (SYSDATE = 2024-12-11 12:00:00):

10 days, 240 hours, 14400 minutes

Oracle 특징:

  • 기본적으로 날짜 차이는 day 단위로 계산됩니다.
  • TO_CHAR를 사용하여 숫자를 문자열로 변환 후 문자열 연산(||)으로 결합.

2. MySQL

SQL 예제:

SELECT CONCAT(DATEDIFF(NOW(), '2024-12-01'), ' days') AS difference_text;

시간과 분까지 포함:

SELECT CONCAT(
    DATEDIFF(NOW(), '2024-12-01'), ' days, ',
    TIMESTAMPDIFF(HOUR, '2024-12-01 00:00:00', NOW()), ' hours, ',
    TIMESTAMPDIFF(MINUTE, '2024-12-01 00:00:00', NOW()), ' minutes'
) AS difference_text;

결과 (NOW() = 2024-12-11 12:00:00):

10 days, 240 hours, 14400 minutes

MySQL 특징:

  • CONCAT를 사용하여 문자열을 조합합니다.
  • DATEDIFF는 일(day) 단위로만 차이를 계산하며, 시간 단위는 TIMESTAMPDIFF를 사용.

3. SQL Server

SQL 예제:

SELECT CAST(DATEDIFF(DAY, '2024-12-01', GETDATE()) AS VARCHAR) + ' days' AS difference_text;

시간과 분까지 포함:

SELECT 
    CAST(DATEDIFF(DAY, '2024-12-01', GETDATE()) AS VARCHAR) + ' days, ' +
    CAST(DATEDIFF(HOUR, '2024-12-01 00:00:00', GETDATE()) AS VARCHAR) + ' hours, ' +
    CAST(DATEDIFF(MINUTE, '2024-12-01 00:00:00', GETDATE()) AS VARCHAR) + ' minutes' AS difference_text;

결과 (GETDATE() = 2024-12-11 12:00:00):

10 days, 240 hours, 14400 minutes

SQL Server 특징:

  • + 연산자로 문자열을 연결합니다.
  • CAST 또는 CONVERT를 사용하여 숫자를 문자열로 변환.

4. PostgreSQL

SQL 예제:

SELECT CONCAT((NOW()::DATE - '2024-12-01'::DATE), ' days') AS difference_text;

시간과 분까지 포함:

SELECT CONCAT(
    (NOW()::DATE - '2024-12-01'::DATE), ' days, ',
    FLOOR(EXTRACT(EPOCH FROM NOW() - '2024-12-01 00:00:00') / 3600), ' hours, ',
    FLOOR(EXTRACT(EPOCH FROM NOW() - '2024-12-01 00:00:00') / 60), ' minutes'
) AS difference_text;

결과 (NOW() = 2024-12-11 12:00:00):

10 days, 240 hours, 14400 minutes

PostgreSQL 특징:

  • CONCAT를 사용하여 문자열을 조합합니다.
  • EXTRACT(EPOCH FROM ...)를 통해 초(second) 단위의 차이를 계산 후, 이를 나눠서 시간(hour) 및 분(minute)으로 변환.

5. SQLite

SQL 예제:

SELECT CAST(JULIANDAY('now') - JULIANDAY('2024-12-01') AS INT) || ' days' AS difference_text;

시간과 분까지 포함:

SELECT 
    CAST(JULIANDAY('now') - JULIANDAY('2024-12-01') AS INT) || ' days, ' ||
    CAST((JULIANDAY('now') - JULIANDAY('2024-12-01')) * 24 AS INT) || ' hours, ' ||
    CAST((JULIANDAY('now') - JULIANDAY('2024-12-01')) * 24 * 60 AS INT) || ' minutes' AS difference_text;

결과 (JULIANDAY('now') = 2024-12-11 12:00:00):

10 days, 240 hours, 14400 minutes

SQLite 특징:

  • || 연산자로 문자열을 결합합니다.
  • CAST를 사용하여 숫자를 문자열로 변환.

비교 요약

DB 일(day) 단위 차이 시간 및 분 포함
Oracle `TO_CHAR(date1 - date2, '9999')  
MySQL CONCAT(DATEDIFF(date1, date2), ' days') CONCATTIMESTAMPDIFF를 사용하여 시간 및 분 포함
SQL Server CAST(DATEDIFF(DAY, date1, date2) AS VARCHAR) CASTDATEDIFF를 조합하여 문자열 반환
PostgreSQL CONCAT((date1::DATE - date2::DATE), ' days') EXTRACT(EPOCH FROM ...)로 초 단위 계산 후 나눗셈
SQLite CAST(JULIANDAY(date1) - JULIANDAY(date2) AS INT) JULIANDAY 결과를 계산 후 `

추가 팁:

  • 날짜 차이를 "00일 00시간 00분" 형식으로 출력하려면 조건문 또는 복잡한 문자열 조작이 필요합니다.
  • 숫자 데이터를 문자열로 변환 시 각 DB에서 제공하는 함수(CAST, TO_CHAR, CONCAT)를 활용하세요.

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

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

 

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

1. OracleSQL: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

alswnsghd1234.tistory.com

 

반응형
SMALL