본문 바로가기

프로그래밍 강의 메모/갖고노는 MySQL 데이터베이스 by 얄코

SELECT 기초 > 시간/날짜 관련 및 기타 함수들

https://inf.run/JvXX

 

갖고노는 MySQL 데이터베이스 by 얄코 - 인프런 | 강의

비전공자도 이해할 수 있는 MySQL! 빠른 설명으로 필수개념만 훑은 뒤 사이트의 예제들과 함께 MySQL을 ‘갖고 놀면서’ 손으로 익힐 수 있도록 만든 강좌입니다., - 강의 소개 | 인프런...

www.inflearn.com

시간/날짜 관련 함수들

 

함수 설명
CURRENT_DATECURDATE 현재 날짜 반환
CURRENT_TIMECURTIME 현재 시간 반환
CURRENT_TIMESTAMPNOW 현재 시간과 날짜 반환

 

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

 

 

 

 

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

 

SELECT
  '2021-6-1' = '2021-06-01',			-- FALSE
  DATE('2021-6-1') = DATE('2021-06-01'),	-- TRUE
  '1:2:3' = '01:02:03',				-- FALSE
  TIME('1:2:3') = TIME('01:02:03');		-- TRUE
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값의 요일명 반환
DAYOFMONTHDAY 주어진 DATETIME값의 날짜(일) 반환
-- 월요일만 추출한다.
SELECT * FROM Orders
WHERE WEEKDAY(OrderDate) = 0;

 

 

 

 

함수 설명
HOUR 주어진 DATETIME의 시 반환
MINUTE 주어진 DATETIME의 분 반환
SECOND 주어진 DATETIME의 초 반환
SELECT
  HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());

 

 

 

 

함수 설명
ADDDATEDATE_ADD 시간/날짜 더하기
SUBDATEDATE_SUB 시간/날짜 빼기
SELECT 
  ADDDATE('2021-06-20', INTERVAL 1 YEAR),		-- 2022-06-20
  ADDDATE('2021-06-20', INTERVAL -2 MONTH),		-- 2021-04-20
  ADDDATE('2021-06-20', INTERVAL 3 WEEK),		-- 2021-07-11
  ADDDATE('2021-06-20', INTERVAL -4 DAY),		-- 2021-06-16
  ADDDATE('2021-06-20', INTERVAL -5 MINUTE),		-- 2021-06-19 23:55:00
  ADDDATE('2021-06-20 13:01:12', INTERVAL 6 SECOND);	-- 2021-06-20 13:01:18

 

 

 

 

함수 설명
DATE_DIFF 두 시간/날짜 간 일수차
TIME_DIFF 두 시간/날짜 간 시간차
-- 현재 날짜와 주문 날짜 차 추출
SELECT
  OrderDate,
  NOW(),
  DATEDIFF(NOW(), OrderDate)
FROM Orders;

 

 

 

 

함수 설명
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;

 

 

 

기타 함수들

 

형식 설명
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');