본문 바로가기

MySQL

[MySQL] 프로그래머스 SQL 문제 해결하면서 몰랐던 개념 정리 (3)

 자동차 대여 기록에서 장기/단기 구분하기(DATEDIFF)


 DATEDIFF(종료일, 시작일)

 종료일과 시작일 사이의 기간을 반환해 주는 함수

 DATE_ADD(기준 날짜, INTERVAL)  날짜 or 시간 더하기
 DATE_SUB(기준 날짜, INTERVAL)  날짜 or 시간 빼기
 DATEDIFF(종료일, 시작일)  두 날짜 간 일수 계산 
 TIMEDIFF(종료일, 시작일)  두 날짜 간 시간 계산
PERIOD_DIFF(시작일, 종료일)  두 날짜간 개월 계산
TIIMESTAMPDIFF(unit, 시작일, 종료일) 시간, 개월 수 등 여러 가지 형태의 계산을 할 수 있는 함수

 

더보기
-- DATE_ADD()
SELECT
    DATE_ADD('2024-06-15 12:30:00', INTERVAL 1 YEAR)	-- 2025-06-15 12:30:00
    DATE_ADD('2024-06-15 12:30:00', INTERVAL -1 YEAR)	-- 2023-06-15 12:30:00
    DATE_ADD('2024-06-15 12:30:00', INTERVAL 1 MONTH)	-- 2024-07-15 12:30:00
    DATE_ADD('2024-06-15 12:30:00', INTERVAL 1 DAY)		-- 2024-06-16 12:30:00
    DATE_ADD('2024-06-15 12:30:00', INTERVAL 1 HOUR)	-- 2024-06-15 13:30:00
    DATE_ADD('2024-06-15 12:30:00', INTERVAL 1 MINUTE)	-- 2024-06-15 12:31:00
    DATE_ADD('2024-06-15 12:30:00', INTERVAL 1 SECOND)	-- 2024-06-15 12:30:01
FROM DUAL
;

-- DATE_SUB()
SELECT
    DATE_SUB('2024-06-15 12:30:00', INTERVAL 1 YEAR)	-- 2023-06-15 12:30:00
    DATE_SUB('2024-06-15 12:30:00', INTERVAL -1 YEAR)	-- 2025-06-15 12:30:00
    DATE_SUB('2024-06-15 12:30:00', INTERVAL 1 MONTH)	-- 2024-05-15 12:30:00
    DATE_SUB('2024-06-15 12:30:00', INTERVAL 1 DAY)		-- 2024-06-14 12:30:00
    DATE_SUB('2024-06-15 12:30:00', INTERVAL 1 HOUR)	-- 2024-06-15 11:30:00
    DATE_SUB('2024-06-15 12:30:00', INTERVAL 1 MINUTE)	-- 2024-06-15 12:29:00
    DATE_SUB('2024-06-15 12:30:00', INTERVAL 1 SECOND)	-- 2024-06-15 12:29:59
FROM DUAL
;

-- DATEDIFF()
-- 날짜 포맷에 시간이 있는 경우 무시됨.
-- 입력값이 날짜 범위를 벗어나는 경우, NULL 반환
SELECT
    DATEDIFF('2024-06-15 22:00:00', '2024-06-01 16:00:00') 	-- 14
FROM DUAL
;

-- TIMEDIFF()
-- 입력값이 날짜 범위를 벗어나는 경우, NULL 반환
SELECT
    DATEDIFF('2024-06-15 22:00:00', '2024-06-14 16:00:00') 	-- 30:00:00
FROM DUAL
;

-- PERIOD_DIFF()
SELECT
    PERIOD_DIFF('2401', '2406') 	-- -5
    PERIOD_DIFF('202406', '202310') 	-- 8
FROM DUAL
;

-- TIIMESTAMPDIFF()
SELECT
    TIIMESTAMPDIFF(MONTH, '2023-11-15', '2024-06-15') 	-- 7
FROM DUAL
;

 

 

 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기(CONCAT + LIMIT)


 CONCAT(문자열 1, 문자열 2,... , 문자열 n)

 [문자열 1] ~ [문자열 n]까지 연결해 주는 함수

 

 LIMIT

 ORACLE의 FETCH ONLY와 같은 의미

 

 

 Front End  개발자 찾기(SUM + &)


 이전에 '조건에 맞는 개발자 찾기'문제를 해결했을 때의 기억을 더듬어서 & 연산자를 사용해야 되겠다고 생각함. 하지만 & 연산자는 1대 1의 관계이기 때문에 한쪽에 여러 개를 설정할 수가 없었다. 그래서 SUM() 함수를 사용하여 하나로 합쳐주었다.

더보기
-- 문법 오류
WHERE SKILL_CODE & (
                        SELECT
                            CODE
                        FROM SKILLCODES
                        WHERE CATEGORY = 'Front End'
                    )

-- 수정
WHERE SKILL_CODE & (
                        SELECT
                            SUM(CODE)
                        FROM SKILLCODES
                        WHERE CATEGORY = 'Front End'
                    )

 

300x250