-- MySQL
SELECT
YEAR(NOW()) AS year, -- 연도 추출
MONTH(NOW()) AS month, -- 월 추출
DAY(NOW()) AS day, -- 일 추출
HOUR(NOW()) AS hour, -- 시간 추출
MINUTE(NOW()) AS minute, -- 분 추출
SECOND(NOW()) AS second -- 초 추출
SELECT EXTRACT(YEAR FROM NOW()) AS year;
SELECT EXTRACT(MONTH FROM '2025-01-15') AS month;
SELECT EXTRACT(DAY FROM '2025-01-15') AS day;
-- PostgreSQL(EXTRACT와 DATEOART로 사용 가능)
SELECT
EXTRACT(YEAR FROM CURRENT_DATE) AS year,
EXTRACT(MONTH FROM CURRENT_DATE) AS month,
EXTRACT(DAY FROM CURRENT_DATE) AS day,
EXTRACT(HOUR FROM CURRENT_TIMESTAMP) AS hour,
EXTRACT(MINUTE FROM CURRENT_TIMESTAMP) AS minute,
EXTRACT(SECOND FROM CURRENT_TIMESTAMP) AS second;
SELECT
DATE_PART('year', CURRENT_DATE) AS year,
DATE_PART('month', CURRENT_DATE) AS month,
DATE_PART('day', CURRENT_DATE) AS day;
SELECT AGE('2025-01-15', '2025-01-01') AS difference;
-- 결과: 14 days
공부를 한 결과를 점검하기 위해 팀 프로젝트를 수행해야 합니다! 이제, 아래와 같은 team_projects(프로젝트) 테이블이 있습니다.
id
|
name
|
start_date
|
end_date
|
aws_cost
|
1
|
일조
|
2023-01-01
|
2023-01-07
|
30000
|
2
|
꿈꾸는이조
|
2023-03-15
|
2023-03-22
|
50000
|
3
|
보람삼조
|
2023-11-20
|
2023-11-30
|
80000
|
4
|
사조참치
|
2022-07-01
|
2022-07-30
|
75000
|
17.
team_projects 테이블에서 AWS 예산(aws_cost)이 40000 이상 들어간 프로젝트들의 이름을 선택하는 쿼리를 작성해주세요!
> SELECT name FROM team_projects WHERE aws_cost >= 40000;
18.
team_projects 테이블에서 2022년에 시작된 프로젝트를 선택하는 쿼리를 작성해주세요! 단, start_date < ‘2023-01-01’ 조건을 사용하지 말고 쿼리를 작성해주세요!
> SELECT * FROM team_projects WHERE YEAR(start_date) = 2022;
19.
team_projects 테이블에서 현재 진행중인 프로젝트를 선택하는 쿼리를 작성해주세요. 단, 지금 시점의 날짜를 하드코딩해서 쿼리하지 말아주세요!
> SELECT * FROM team_projects WHERE CURDATE() BETWEEN start_date AND end_date;
20.
team_projects 테이블에서 각 프로젝트의 지속 기간을 일 수로 계산하는 쿼리를 작성해주세요!
> SELECT name, DATEDIFF(end_date, start_date) AS working_days FROM team_projects;
공통 날짜 형식 코드
%Y | 연도 (4자리) |
%y | 연도 (2자리) |
%m | 월 (2자리) |
%d | 일 (2자리) |
%H | 시간 (24시간제) |
%i | 분 |
%s | 초 |
날짜에서 값 추출
MySQL에서는 단순 Year(), Month()로 날짜에서 값 추출이 가능하다.
반면 PostgreSQL에서는 EXTRACT()나 DATE_PART() 같은 함수를 사용해야 한다.
EXTRACT()는 MySQL, PostgreSQL 두 환경 모두 사용 가능하다
-- MySQL
SELECT
YEAR(NOW()) AS year, -- 연도 추출
MONTH(NOW()) AS month, -- 월 추출
DAY(NOW()) AS day, -- 일 추출
HOUR(NOW()) AS hour, -- 시간 추출
MINUTE(NOW()) AS minute, -- 분 추출
SECOND(NOW()) AS second -- 초 추출
SELECT EXTRACT(YEAR FROM NOW()) AS year;
SELECT EXTRACT(MONTH FROM '2025-01-15') AS month;
SELECT EXTRACT(DAY FROM '2025-01-15') AS day;
-- PostgreSQL
SELECT
EXTRACT(YEAR FROM CURRENT_DATE) AS year,
EXTRACT(MONTH FROM CURRENT_DATE) AS month,
EXTRACT(DAY FROM CURRENT_DATE) AS day,
EXTRACT(HOUR FROM CURRENT_TIMESTAMP) AS hour,
EXTRACT(MINUTE FROM CURRENT_TIMESTAMP) AS minute,
EXTRACT(SECOND FROM CURRENT_TIMESTAMP) AS second;
SELECT
DATE_PART('year', CURRENT_DATE) AS year,
DATE_PART('month', CURRENT_DATE) AS month,
DATE_PART('day', CURRENT_DATE) AS day;
MySQL 날짜 시간 관련 함수
날짜 및 시간 추출 | NOW() | 현재 날짜와 시간을 반환 |
CURDATE() | 현재 날짜를 반환 | |
CURTIME() | 현재 시간을 반환 | |
DATE(expr) | 날짜에서 날짜 부분만 추출 | |
TIME(expr) | 날짜에서 시간 부분만 추출 | |
날짜 연산 | DATE_ADD(date, INTERVAL value unit) | 날짜에 특정 간격을 더함 |
DATE_SUB(date, INTERVAL value unit) | 날짜에서 특정 간격을 뺍니다. | |
DATEDIFF(date1, date2) | 두 날짜 간의 일수 차이를 계산 | |
날짜 형식 | DATE_FORMAT(date, format) | 날짜를 특정 형식으로 변환 |
- PostgreSQL과 차이?
PostgreSQL에서 사용했던 CURRENT_TIME, CURRENT_DATE와는 함수 형식이 다르다.
DATEDIFF()는 지원하지 않기 때문에 아래처럼 AGE() 함수를 사용하여 날짜 간격을 계산할 수 있다.
SELECT AGE('2025-01-15', '2025-01-01') AS difference;
-- 결과: 14 days
-- DBMS간의 함수 차이가 있기 때문에 잘 알아보고 사용하는 것이 중요하다.
'SQL' 카테고리의 다른 글
[SQL 기초 연습] 7. 랭크게임 하다가 싸워서 피드백 남겼어요 (0) | 2025.01.16 |
---|---|
[SQL 기초 연습] 6. 팀 프로젝트 열심히 했으니 다시 놀아볼까요?! - LOL 유저 테이블 (0) | 2025.01.15 |
[SQL 기초 연습] 4. 이제 놀만큼 놀았으니 다시 공부해봅시다! (0) | 2025.01.14 |
[SQL 기초 연습] 3. 상품 주문이 들어왔으니 주문을 처리해봅시다! (0) | 2025.01.14 |
[SQL 기초 연습] 2. 이제 좀 벌었으니 flex 한 번 해볼까요?! (0) | 2025.01.14 |