Database/MySQL

MySQL 시간/날짜 관련 함수 알아보기

dev.Woody 2021. 11. 29. 23:57

현재 시간과 날짜 알아보기

NOW() 함수를 통해서 현재 시간을 확인할 수 있다. CURDATE(),CURTIME()함수를 이용시 각각 현재 날짜와 현재시간을 반환한다.

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

시간과 날짜 표현하기

시간과 날짜의 표현의 경우 각각 DATE()와 TIME()함수를 이용한다. 문자열을 넣어주면 문자열에 따른 날짜와 시간을 생성한다. 

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');

DATETIME에서 년도, 월, 시, 분, 초 표현하기

YEAR()통해 해당 년도를 반환하고 MONTHNAME()은 July같은 월의 영문명을 반환하고 MONTH()는 월을 수로 반환한다. WEEKDAY는 월요일 0을 기준으로 한 요일값을 반환한다. DAYNAME은 요일명을 반환한다. DAY()는 주어진 일을 반환한다.

SELECT
  OrderDate,
  CONCAT(
    CONCAT_WS(
      '/',
      YEAR(OrderDate), MONTH(OrderDate), DAY(OrderDate)
    ),
    ' ',
    UPPER(LEFT(DAYNAME(OrderDate), 3))
  )
FROM Orders;

HOUR을 통해서 시, MINUTE()을 통해서 분을 SECOND를 통해서 초를 반환한다.

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

시간과 날짜 연산하기

ADDDATE({날짜},INTERVAL {값} {단위}) 또는 DATE_ADD({날짜},INTERVAL {값} {단위})을 통해서 날짜에 시간과 날짜를 더할 수 있다. SUBDATE({날짜},INTERVAL {값} {단위}) , DATE_SUB({날짜},INTERVAL {값} {단위})을 통해서 날짜에 시간과 날짜를 뺄 수 있다.

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);

두 날짜 또는 시간 간 차이를 계산하기 위해서는 DATE_DIFF({날짜1},{날짜2})를 이용하면 날짜1에서 날짜2를 뺀값을 반환한다. 시간을 계산하려면 TIME_DIFF({시간1},{시간2})를 이용해서 시간1 - 시간2 값을 구할 수 있다.

SELECT
  TIMEDIFF('2021-06-21 15:20:35', '2021-06-21 16:34:41');

LAST_DAY({DATETIME})을 이용하면 해당 달의 마지막 날짜를 반환한다.

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

시간과 날짜 형식 지정하기

DATE_FORMAT({DATETIME}, '{표시 형식}')으로 시간과 날짜의 형식을 지정할 수 있다. 

형식설명형식설명
%Y 년도(4자리) %y 년도(2자리)
%M 월(영문) %m 월(숫자)
%D 일(영문) %d, %e 일(숫자)
%T hh:mm:ss %r hh:mm:ss AM/PM
%H, %k 시(24시간제) %h, %l 시(12시간제)
%i %S, %s
%p AM/PM    
SELECT REPLACE(
  REPLACE(
    DATE_FORMAT(NOW(), '%Y년 %m월 %d일 %p %h시 %i분 %초'),
    'AM', '오전'
  ),
  'PM', '오후'
)

문자열을 특정형식으로 해석하여 시간과 날짜 생성하기

STR_TO_DATE({문자열},{형식})을 이용해서 문자열을 특정 형식으로 시간과 날짜를 생성할 수 있다.

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;