μž‘μ„±μΌ λŒ“κΈ€ 남기기

πŸ“… SQLμ—μ„œ λ‚ μ§œ 계산과 μœ€λ…„ νŒλ‹¨ 방법 및 μ£Όμ˜ν•  점

βœ… SQLμ—μ„œ λ‚ μ§œ κ΅¬ν•˜κΈ°
SQL의 λ‚ μ§œ ν•¨μˆ˜λŠ” μ‚¬μš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ— 따라 λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œλŠ” λŒ€ν‘œμ μœΌλ‘œ MySQLκ³Ό Oracle, SQL Server κΈ°μ€€μœΌλ‘œ μ†Œκ°œν•©λ‹ˆλ‹€.

 

πŸ“Œ ν˜„μž¬ λ‚ μ§œ κ΅¬ν•˜κΈ°
DBMS
ν˜„μž¬ λ‚ μ§œ ν•¨μˆ˜
MySQL
CURRENT_DATE, CURDATE()
Oracle
SYSDATE
SQL Server
GETDATE()
— MySQL
SELECT CURDATE();
— Oracle
SELECT SYSDATE FROM DUAL;
— SQL Server
SELECT GETDATE();
πŸ“Œ λ‚ μ§œ λ”ν•˜κ³  λΉΌκΈ°
DBMS
μ‚¬μš©λ²• μ˜ˆμ‹œ
MySQL
DATE_ADD('2025-04-23', INTERVAL 7 DAY)
Oracle
SYSDATE + 7
SQL Server
DATEADD(DAY, 7, GETDATE())
πŸ”„ μœ€λ…„(leap year) νŒλ‹¨ 방법
μœ€λ…„μ€ **”4둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ©΄μ„œ 100μœΌλ‘œλŠ” λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€μ§€ μ•Šκ±°λ‚˜, 400으둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§€λŠ” ν•΄”**μž…λ‹ˆλ‹€.
πŸ“Œ SQL둜 μœ€λ…„ κ΅¬ν•˜κΈ° (MySQL μ˜ˆμ‹œ)
SELECT
YEAR,
CASE
WHEN (YEAR % 4 = 0 AND YEAR % 100 != 0) OR (YEAR % 400 = 0)
THEN ‘μœ€λ…„’
ELSE ‘평년’
END AS μœ€λ…„μ—¬λΆ€
FROM (
SELECT 2024 AS YEAR UNION ALL
SELECT 2025 UNION ALL
SELECT 1900 UNION ALL
SELECT 2000
) AS YEARS;
πŸ“Œ Oracle μ˜ˆμ‹œ
SELECT year,
CASE
WHEN MOD(year, 4) = 0 AND MOD(year, 100) != 0 OR MOD(year, 400) = 0
THEN ‘μœ€λ…„’
ELSE ‘평년’
END AS μœ€λ…„μ—¬λΆ€
FROM (SELECT 2024 AS year FROM dual
UNION ALL SELECT 2025 FROM dual
UNION ALL SELECT 1900 FROM dual
UNION ALL SELECT 2000 FROM dual);
⚠️ μ£Όμ˜ν•  점
  1. DBMS별 ν•¨μˆ˜ 차이
    λ‚ μ§œ 계산 ν•¨μˆ˜λ‚˜ ν˜•μ‹μ€ λ°μ΄ν„°λ² μ΄μŠ€λ§ˆλ‹€ λ‹€λ₯΄λ―€λ‘œ, μ‚¬μš© 쀑인 μ‹œμŠ€ν…œμ˜ 곡식 λ¬Έμ„œλ₯Ό μ°Έκ³ ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  2. μœ€λ…„ νŒλ‹¨μ€ 직접 μ—°μ‚°μœΌλ‘œ κ΅¬ν˜„ν•΄μ•Ό 함
    λŒ€λΆ€λΆ„μ˜ DBλŠ” IS_LEAP_YEAR() 같은 λ‚΄μž₯ ν•¨μˆ˜κ°€ μ—†κΈ° λ•Œλ¬Έμ— μˆ˜μ‹μ„ 직접 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  3. λ‚ μ§œ 포맷 톡일
    YYYY-MM-DD λ˜λŠ” YYYY/MM/DD λ“± λ‚ μ§œ ν˜•μ‹μ΄ μΌκ΄€λ˜μ§€ μ•ŠμœΌλ©΄ 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ, 포맷을 항상 λͺ…μ‹œν•˜κ±°λ‚˜ λ³€ν™˜ν•΄ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
  4. νƒ€μž„μ‘΄ κ³ λ €
    특히 GETDATE(), SYSDATE 등은 μ„œλ²„μ˜ μ‹œκ°„λŒ€λ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜λ―€λ‘œ, νƒ€μž„μ‘΄μ΄ μ€‘μš”ν•œ μ‹œμŠ€ν…œμ—μ„œλŠ” CURRENT_TIMESTAMP AT TIME ZONE 등을 ν™œμš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
🎯 결둠
SQLμ—μ„œ λ‚ μ§œ μ²˜λ¦¬μ™€ μœ€λ…„ 계산은 κ°„λ‹¨ν•œ ν•¨μˆ˜μ™€ μˆ˜μ‹μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ DBMS별 문법 차이, 포맷 관리, νƒ€μž„μ‘΄ 문제 등을 염두에 두고 μ‚¬μš©ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.
λ‹΅κΈ€ 남기기