home강의 홈으로
Section 1. SELECT 기초 - 원하는 정보 찾기
Lesson 4. 시간/날짜 관련 및 기타 함수들

🕹️ 실습 링크 바로가기

위의 사이트에서 실습이 안 될 시 👉 클릭해주세요!



1. 시간/날짜 관련 함수들


함수 설명
CURRENT_DATE, CURDATE 현재 날짜 반환
CURRENT_TIME, CURTIME 현재 시간 반환
CURRENT_TIMESTAMP, NOW 현재 시간과 날짜 반환

SELECT CURDATE(), CURTIME(), NOW();



함수 설명
DATE 문자열에 따라 날짜 생성
TIME 문자열에 따라 시간 생성

SELECT '2021-6-1' = '2021-06-01', DATE('2021-6-1') = DATE('2021-06-01'), '1:2:3' = '01:02:03', TIME('1:2:3') = TIME('01:02:03'); SELECT '2021-6-1 1:2:3' = '2021-06-01 01:02:03', DATE('2021-6-1 1:2:3') = DATE('2021-06-01 01:02:03'), TIME('2021-6-1 1:2:3') = TIME('2021-06-01 01:02:03'), DATE('2021-6-1 1:2:3') = TIME('2021-06-01 01:02:03'), DATE('2021-6-1') = DATE('2021-06-01 01:02:03'), TIME('2021-6-1 1:2:3') = TIME('01:02:03');
SELECT * FROM Orders WHERE OrderDate BETWEEN DATE('1997-1-1') AND DATE('1997-1-31');



함수 설명
YEAR 주어진 DATETIME값의 년도 반환
MONTHNAME 주어진 DATETIME값의 월(영문) 반환
MONTH 주어진 DATETIME값의 월 반환
WEEKDAY 주어진 DATETIME값의 요일값 반환(월요일: 0)
DAYNAME 주어진 DATETIME값의 요일명 반환
DAYOFMONTH, DAY 주어진 DATETIME값의 날짜(일) 반환

SELECT OrderDate, YEAR(OrderDate) AS YEAR, MONTHNAME(OrderDate) AS MONTHNAME, MONTH(OrderDate) AS MONTH, WEEKDAY(OrderDate) AS WEEKDAY, DAYNAME(OrderDate) AS DAYNAME, DAY(OrderDate) AS DAY FROM Orders; SELECT OrderDate, CONCAT( CONCAT_WS( '/', YEAR(OrderDate), MONTH(OrderDate), DAY(OrderDate) ), ' ', UPPER(LEFT(DAYNAME(OrderDate), 3)) ) FROM Orders; SELECT * FROM Orders WHERE WEEKDAY(OrderDate) = 0;



함수 설명
HOUR 주어진 DATETIME의 시 반환
MINUTE 주어진 DATETIME의 분 반환
SECOND 주어진 DATETIME의 초 반환

SELECT HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());



함수 설명
ADDDATE, DATE_ADD 시간/날짜 더하기
SUBDATE, DATE_SUB 시간/날짜 빼기

SELECT ADDDATE('2021-06-20', INTERVAL 1 YEAR), ADDDATE('2021-06-20', INTERVAL -2 MONTH), ADDDATE('2021-06-20', INTERVAL 3 WEEK), ADDDATE('2021-06-20', INTERVAL -4 DAY), ADDDATE('2021-06-20', INTERVAL -5 MINUTE), ADDDATE('2021-06-20 13:01:12', INTERVAL 6 SECOND); SELECT OrderDate, ADDDATE(OrderDate, INTERVAL 1 YEAR), ADDDATE(OrderDate, INTERVAL -2 MONTH), ADDDATE(OrderDate, INTERVAL 3 WEEK), ADDDATE(OrderDate, INTERVAL -4 DAY), ADDDATE(OrderDate, INTERVAL -5 MINUTE) FROM Orders;



함수 설명
DATE_DIFF 두 시간/날짜 간 일수차
TIME_DIFF 두 시간/날짜 간 시간차

SELECT OrderDate, NOW(), DATEDIFF(OrderDate, NOW()) FROM Orders; SELECT TIMEDIFF('2021-06-21 15:20:35', '2021-06-21 16:34:41');
SELECT * FROM Orders WHERE ABS(DATEDIFF(OrderDate, '1996-10-10')) < 5;



함수 설명
LAST_DAY 해당 달의 마지막 날짜

SELECT OrderDate, LAST_DAY(OrderDate), DAY(LAST_DAY(OrderDate)), DATEDIFF(LAST_DAY(OrderDate), OrderDate) FROM Orders;



함수 설명
DATE_FORMAT 시간/날짜를 지정한 형식으로 반환
형식 설명
%Y 년도 4자리
%y 년도 2자리
%M 월 영문
%m 월 숫자
%D 일 영문(1st, 2nd, 3rd...)
%d, %e 일 숫자 (01 ~ 31)
%T hh:mm:ss
%r hh:mm:ss AM/PM
%H, %k 시 (~23)
%h, %l 시 (~12)
%i
%S, %s
%p AM/PM

SELECT DATE_FORMAT(NOW(), '%M %D, %Y %T'), DATE_FORMAT(NOW(), '%y-%m-%d %h:%i:%s %p'), DATE_FORMAT(NOW(), '%Y년 %m월 %d일 %p %h시 %i분 %s초'); SELECT REPLACE( REPLACE( DATE_FORMAT(NOW(), '%Y년 %m월 %d일 %p %h시 %i분 %초'), 'AM', '오전' ), 'PM', '오후' )



함수 설명
STR _ TO _ DATE(S, F) S를 F형식으로 해석하여 시간/날짜 생성
SELECT DATEDIFF( STR_TO_DATE('2021-06-04 07:48:52', '%Y-%m-%d %T'), STR_TO_DATE('2021-06-01 12:30:05', '%Y-%m-%d %T') ), TIMEDIFF( STR_TO_DATE('2021-06-04 07:48:52', '%Y-%m-%d %T'), STR_TO_DATE('2021-06-01 12:30:05', '%Y-%m-%d %T') );
SELECT OrderDate, DATEDIFF( STR_TO_DATE('1997-01-01 13:24:35', '%Y-%m-%d %T'), OrderDate ), TIMEDIFF( STR_TO_DATE('1997-01-01 13:24:35', '%Y-%m-%d %T'), STR_TO_DATE(CONCAT(OrderDate, ' ', '00:00:00'), '%Y-%m-%d %T') ) FROM Orders;

🐬 더 많은 시간/날짜 함수 보러가기 ▶️



2. 기타 함수들


형식 설명
IF(조건, T, F) 조건이 참이라면 T, 거짓이면 F 반환

SELECT IF (1 > 2, '1는 2보다 크다.', '1은 2보다 작다.');

💡 보다 복잡한 조건은 CASE문을 사용합니다.

SELECT CASE WHEN -1 > 0 THEN '-1은 양수다.' WHEN -1 = 0 THEN '-1은 0이다.' ELSE '-1은 음수다.' END;
SELECT Price, IF (Price > 30, 'Expensive', 'Cheap'), CASE WHEN Price < 20 THEN '저가' WHEN Price BETWEEN 20 AND 30 THEN '일반' ELSE '고가' END FROM Products;



형식 설명
IFNULL(A, B) A가 NULL일 시 B 출력
SELECT IFNULL('A', 'B'), IFNULL(NULL, 'B');

🤔얄코에게 질문하기질문은 반.드.시 이리로 보내주세요! ( 강의사이트 질문기능 ✖ )

강의에서 이해가 안 되거나 실습상 문제가 있는 부분,
설명이 잘못되었거나 미흡한 부분을 메일로 알려주세요!

답변드린 뒤 필요할 경우 본 페이지에
관련 내용을 추가/수정하도록 하겠습니다.

이메일 주소
yalco@yalco.kr
메일 제목 (반드시 아래 제목을 붙여넣어주세요!)
[질문] MySQL 1-4

🛑질문 전 필독!!

  • 구글링을 먼저 해 주세요. 들어오는 질문의 절반 이상은 구글에 검색해 보면 1분 이내로 답을 찾을 수 있는 내용들입니다.
  • 오류 메시지가 있을 경우 이를 구글에 복붙해서 검색해보면 대부분 짧은 시간 내 해결방법을 찾을 수 있습니다.
  • 강의 페이지에 추가사항 등 놓친 부분이 없는지 확인해주세요. 자주 들어오는 질문은 페이지에 추가사항으로 업데이트됩니다.
  • "유료파트의 강의페이지는 어디 있나요?" - 각 영상의 시작부분 검은 화면마다 해당 챕터의 강의페이지 링크가 있습니다.
  • 질문을 보내주실 때는 문제가 어떻게 발생했고 어떤 상황인지 등을 구체적으로 적어주세요. 스크린샷을 첨부해주시면 더욱 좋습니다.
🌏 Why not change the world?