SQL - 날짜와 시간: 초보자를 위한 종합 가이드
안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 SQL에서 날짜와 시간의 fascinaiting 세상으로 뛰어들어 보겠습니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 저는 많은 예제와 설명으로 여러분을 이 길 안내해 드리겠습니다. 그러면 가상의 시간 기계를 집어들고, 시작해 보겠습니다!
SQL에서 날짜와 시간 데이터 타입
날짜와 시간을 조작하기 전에, SQL이 이 정보를 어떻게 저장하는지 이해해야 합니다. 이 데이터 타입들은 시간 데이터를 위한 특별한 컨테이너로 생각하면 됩니다.
DATE
DATE
데이터 타입은 YYYY-MM-DD 형식으로 날짜를 저장합니다.
CREATE TABLE events (
event_id INT PRIMARY KEY,
event_name VARCHAR(100),
event_date DATE
);
INSERT INTO events (event_id, event_name, event_date)
VALUES (1, 'Company Picnic', '2023-07-15');
이 예제에서 우리는 events
테이블을 생성하고, 2023년 7월 15일에 예정된 회사 피크닉을 추가하고 있습니다. DATE
데이터 타입은 날짜만 저장하며 시간 정보는 포함하지 않습니다.
TIME
TIME
데이터 타입은 HH:MI:SS 형식으로 시간을 저장합니다.
CREATE TABLE class_schedule (
class_id INT PRIMARY KEY,
class_name VARCHAR(100),
start_time TIME
);
INSERT INTO class_schedule (class_id, class_name, start_time)
VALUES (1, 'Introduction to SQL', '09:30:00');
여기서 우리는 class_schedule
테이블을 생성하고, 오전 9시 30분에 시작하는 SQL 수업을 추가하고 있습니다. TIME
데이터 타입은 이 시간을 정확하게 저장할 수 있습니다.
DATETIME
DATETIME
데이터 타입은 날짜와 시간을 결합하여 YYYY-MM-DD HH:MI:SS 형식으로 저장합니다.
CREATE TABLE appointments (
appointment_id INT PRIMARY KEY,
patient_name VARCHAR(100),
appointment_datetime DATETIME
);
INSERT INTO appointments (appointment_id, patient_name, appointment_datetime)
VALUES (1, 'John Doe', '2023-06-20 14:30:00');
이 예제에서 우리는 appointments
테이블을 생성하고, John Doe의 2023년 6월 20일 오후 2시 30분에 예약된 의사 약속을 추가하고 있습니다. DATETIME
데이터 타입은 날짜와 시간을 단일 컬럼에 저장할 수 있습니다.
TIMESTAMP
TIMESTAMP
데이터 타입은 DATETIME
과 유사하지만, 종종 기록이 마지막으로 수정된 시간을 추적하는 데 사용됩니다.
CREATE TABLE blog_posts (
post_id INT PRIMARY KEY,
title VARCHAR(200),
content TEXT,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO blog_posts (post_id, title, content)
VALUES (1, 'My First Blog Post', 'Hello, World!');
이 예제에서 last_updated
컬럼은 기록이 삽입되거나 업데이트될 때 자동으로 현재 날짜와 시간으로 설정됩니다.
SQL에서 날짜와 시간 함수
이제 날짜와 시간을 저장하는 방법을 알고 있으므로, SQL이 제공하는 이 데이터를 조작하기 위한 마법의 함수들을 탐구해 보겠습니다. 이 함수들은 SQL 도구 상자에서 시간 여행 도구로 생각할 수 있습니다!
현재 날짜와 시간
가장 기본적인 것으로 시작해 보겠습니다 - 현재 날짜와 시간을 가져오는 것.
SELECT CURRENT_DATE() AS today,
CURRENT_TIME() AS current_time,
NOW() AS current_datetime;
이 쿼리는 현재 날짜, 시간, 그리고 날짜와 시간을 제공합니다. SQL에게 "이제 시간이 몇이냐?"고 물어보는 것처럼 유용하죠?
날짜의 일부 추출
때로는 날짜의 특정 부분만 필요할 때가 있습니다. SQL은 이를 위한 함수들도 제공합니다!
SELECT YEAR('2023-06-20') AS year,
MONTH('2023-06-20') AS month,
DAY('2023-06-20') AS day,
WEEKDAY('2023-06-20') AS weekday;
이 쿼리는 주어진 날짜에서 연, 월, 일, 그리고 요일을 추출합니다. 날짜를 분해하여 필요한 정보를 얻는 것입니다.
날짜 산술
SQL은 날짜에 산술 연산을 수행할 수 있습니다. 이는 기간 계산이나 미래/과거 날짜를 찾는 데 특히 유용합니다.
SELECT DATE_ADD('2023-06-20', INTERVAL 7 DAY) AS week_later,
DATE_SUB('2023-06-20', INTERVAL 1 MONTH) AS month_ago,
DATEDIFF('2023-12-31', '2023-06-20') AS days_until_new_year;
이 예제에서 우리는 날짜에 7일을 더하고, 1개월을 뺀 후 날짜를 계산하며, 두 날짜 사이의 일수를 계산합니다. 시간 기계를 손에 들고 있는 것 같죠!
날짜 포맷ting
때로는 날짜를 특정 형식으로 표시해야 할 때가 있습니다. DATE_FORMAT
함수가 이를 도와줍니다.
SELECT DATE_FORMAT('2023-06-20', '%W, %M %d, %Y') AS formatted_date,
DATE_FORMAT('2023-06-20 14:30:00', '%h:%i %p') AS formatted_time;
이 쿼리는 날짜를 "Tuesday, June 20, 2023" 형식으로 표시하고, 시간을 "02:30 PM" 형식으로 표시합니다. 날짜를 화려한 옷을 입혀주는 것입니다!
다음은 일반적으로 사용되는 포맷 지시자 표입니다:
지시자 | 설명 | 예제 |
---|---|---|
%Y | 4자리 연도 | 2023 |
%y | 2자리 연도 | 23 |
%M | 월 이름 | January |
%m | 월 (01-12) | 01 |
%d | 월의 일 (01-31) | 01 |
%W | 요일 이름 | Monday |
%w | 요일 (0-6, 0은 일요일) | 1 |
%H | 시간 (00-23) | 13 |
%h | 시간 (01-12) | 01 |
%i | 분 (00-59) | 30 |
%s | 초 (00-59) | 45 |
%p | AM 또는 PM | PM |
모든 것을 함께 묶기
마지막으로, 여러 개의 개념을 결합한 더 복잡한 예제를 보겠습니다:
CREATE TABLE user_logins (
login_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
login_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO user_logins (user_id) VALUES (1), (2), (3);
SELECT
user_id,
login_time,
DATE_FORMAT(login_time, '%W, %M %d, %Y at %h:%i %p') AS formatted_login_time,
CASE
WHEN WEEKDAY(login_time) IN (5, 6) THEN 'Weekend Login'
ELSE 'Weekday Login'
END AS login_type,
TIMESTAMPDIFF(HOUR, login_time, NOW()) AS hours_since_login
FROM user_logins
WHERE login_time > DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK);
이 예제에서 우리는 user_logins
테이블을 생성하고, 데이터를 추가한 후, 다양한 날짜와 시간 조작을 통해 쿼리를 수행합니다. 우리는 로그인 시간을 포맷ting하고, 주말 또는 평일 로그인 여부를 결정하며, 로그인 이후 경과 시간을 계산합니다.
그리고 여러분! 우리는 SQL을 통해 시간을 여행하며, 날짜와 시간 데이터 타입과 함수를 배웠습니다. 연습을 통해 완벽하게 만들어 보세요. 빨리 데이터베이스에서 시간을 조작할 수 있도록 능숙해질 거예요!
Credits: Image by storyset