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;
설명:
- 날짜 차이 계산:
SYSDATE - TO_DATE(...)
는 기본적으로day
단위 차이를 반환. - 시간 추출:
(차이 * 24) % 24
로 시간 값을 추출. - 분 추출:
(차이 * 24 * 60) % 60
으로 분 값을 추출. - 최종적으로
||
연산자를 사용하여 문자열 결합.
결과:
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;
설명:
- 전체 분 단위 차이 계산:
TIMESTAMPDIFF(MINUTE, ...)
로 전체 분 차이를 계산. - 일(day) 계산:
전체 분 / 1440
(1일 = 1440분). - 시간(hour) 계산:
(전체 분 / 60) % 24
. - 분(minute) 계산:
전체 분 % 60
. 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;
설명:
WITH
절로 총 분 계산:DATEDIFF(MINUTE, ...)
를 사용해 전체 분 계산.- 일(day), 시간(hour), 분(minute) 계산
일
:total_minutes / 1440
.시간
:(total_minutes / 60) % 24
.분
:total_minutes % 60
.
- :
+
연산자로 문자열을 결합.
결과:
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;
설명:
- 초(second) 단위 계산:
EXTRACT(EPOCH FROM ...)
를 사용해 전체 초 단위 차이를 계산. - 일(day), 시간(hour), 분(minute) 계산
일
:total_seconds / 86400
(1일 = 86400초).시간
:(total_seconds % 86400) / 3600
.분
:(total_seconds % 3600) / 60
.
- :
||
연산자를 사용해 문자열로 결합.
결과:
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;
설명:
JULIANDAY
로 날짜 차이 계산:JULIANDAY('now') - JULIANDAY(...)
는 소수점 포함 날짜 차이를 반환.- 일(day), 시간(hour), 분(minute) 계산
일
:(JULIANDAY('now') - JULIANDAY(...))
의 정수 부분.시간
:(차이 * 24) % 24
.분
:(차이 * 24 * 60) % 60
.
- :
||
연산자를 사용해 문자열 결합.
결과:
10일 12시간 30분
비교 요약
DB | SQL 문법 | 결과 예제 |
---|---|---|
Oracle | TRUNC(days) 와 MOD(days * 24, 24) 활용 |
10일 12시간 30분 |
MySQL | CONCAT 와 TIMESTAMPDIFF 활용 |
10일 12시간 30분 |
SQL Server | DATEDIFF 와 CAST 를 조합해 일/시간/분 계산 |
10일 12시간 30분 |
PostgreSQL | EXTRACT(EPOCH FROM ...) 를 사용해 초 단위 계산 후 나눗셈 및 나머지 계산 |
10일 12시간 30분 |
SQLite | JULIANDAY 와 산술 연산으로 일/시간/분 계산 |
10일 12시간 30분 |
추가 팁
- 타임존 고려:
- 시간이 UTC 또는 로컬 타임인지 확인 후 변환이 필요할 수 있습니다.
- PostgreSQL:
AT TIME ZONE
을 사용. - MySQL:
CONVERT_TZ()
활용.
- 포맷 출력 사용자 정의:
- 일부 데이터베이스에서는 날짜 차이를 직접 계산하지 않고, 언어별 애플리케이션에서 처리하도록 데이터를 반환하기도 합니다.
2024.12.11 - [데이터베이스] - 데이터베이스별 두 날짜 간 차이를 문자열로 반환 : 예시 코드
2024.12.11 - [데이터베이스] - 데이터베이스별 두 날짜 간의 차이 계산 : 예시코드
반응형
SMALL
'데이터베이스' 카테고리의 다른 글
데이터베이스별 두 날짜 간의 차이 계산 : 예시코드 (0) | 2024.12.11 |
---|---|
데이터베이스별 두 날짜 간 차이를 문자열로 반환 : 예시 코드 (0) | 2024.12.11 |
데이터베이스별 문자열 처리 방법 : 예시코드 (0) | 2024.12.11 |
데이터베이스별로 날짜형식으로 변환 방법 : 예시코드 (0) | 2024.12.11 |
PostgreSQL 에러코드 및 해결 방법 : 예시코드 (0) | 2024.12.11 |