본문 바로가기
SQL

[SQL 기초 연습] 5. 공부하다보니 팀 프로젝트 시간이 왔어요!

by wooksss 2025. 1. 15.
-- 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간의 함수 차이가 있기 때문에 잘 알아보고 사용하는 것이 중요하다.