DB. MySQL 4 시간/날짜 관련 및 기타함수

JINSOO PARK·2021년 11월 11일
0

DB 강의

목록 보기
5/7

시간/ 날짜 관련 함수들

링크텍스트


1. CURRENT


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

ex1)

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


2. DATE, TIME


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

ex1)

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

  • '2021-6-1' = '2021-06-01' 을 비교했을땐 문자열로 인식되어 0(FALSE)가 나옴

  • DATE안에 집어 넣게 되면 날짜로 인식하기 때문에 비교했을 때 1(TURE)가 나옴

  • '1:2:3' = '01:02:03'도 마찬가지로 문자열로 인식되어 0(FALSE)가 나옴

  • TIME안에 집어 넣으면 시간으로 인식되어, 비교하면 1(TRUE)가 나옴


**ex1-1)**
SELECT
  1. '2021-6-1 1:2:3' = '2021-06-01 01:02:03',
  2. DATE('2021-6-1 1:2:3') = DATE('2021-06-01 01:02:03'),
  3. TIME('2021-6-1 1:2:3') = TIME('2021-06-01 01:02:03'),
  4. DATE('2021-6-1 1:2:3') = TIME('2021-06-01 01:02:03'),
  5. DATE('2021-6-1') = DATE('2021-06-01 01:02:03'),
  6. TIME('2021-6-1 1:2:3') = TIME('01:02:03');

  1. '2021-6-1 1:2:3' = '2021-06-01 01:02:03'은 문자열이기 때문에 0(FALSE)

  2. DATE() 안에 시간도 들어 갔지만 시간은 무시됨 1(TRUE)

  3. TIME() 안에 날짜도 들어 갔지만 날짜는 무시됨 1(TRUE)

  4. DATE() 와 TIME() 안에 같은 날짜와 시간이 들어 갔지만 각 각 날짜와 시간만 인식 하기 때문에 0(FALSE)

  5. DATE() 안에 한쪽엔 날짜만, 한쪽엔 날짜/시간이 들어갔지만 시간은 무시되서 1(TRUE)

  6. TIME() 도 마찬가지로 날짜는 무시되서 1(TRUE)


**ex2) 테이블 적용**
SELECT * FROM Orders
WHERE OrderDate BETWEEN DATE('1997-1-1') AND DATE('1997-1-31');

BETWEEN과 DATE()를 사용하여 지정한 날짜 사이에 있는 데이터들을 불러 왔다.


3. YEAR, MONTH, DAY


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


ex1)

SELECT
SELECT OrderDate FROM Orders;

해당 정보를 YEAR, MONTH, DAY를 이용해서 나누어 본다.


ex1-1)

SELECT
  OrderDate,
  1. YEAR(OrderDate) AS YEAR,
  2. MONTHNAME(OrderDate) AS MONTHNAME,
  3. MONTH(OrderDate) AS MONTH,
  4. WEEKDAY(OrderDate) AS WEEKDAY,
  5. DAYNAME(OrderDate) AS DAYNAME,
  6. DAY(OrderDate) AS DAY
FROM Orders;

  1. OrderDate에서 년도에 해당하는 정보를 보여줌

  2. OrderDate에서 월에 해당하는 정보를 영문으로 보여줌

  3. OrderDate에서 월에 해당하는 정보를 숫자로 보여줌

  4. OrderDate에서 요일에 해당하는 정보를 숫자로 보여줌

  5. OrderDate에서 요일에 해당하는 정보를 영문으로 보여줌

  6. OrderDate에서 일에 해당하는 정보를 보여줌


ex2) 응용

SELECT
  OrderDate,
  CONCAT(
    CONCAT_WS(
      '/',
      YEAR(OrderDate), MONTH(OrderDate), DAY(OrderDate)
    ),
    ' ',
    UPPER(LEFT(DAYNAME(OrderDate), 3))
  ) AS 'Y/M/D W'
FROM Orders;

OrderDate의 정보에서 년, 월, 일 정보에 사이에 '/'를 붙이고, DAYNAME을 사용해서 영문 요일의 왼쪽에서 3글자만 가져와서 붙인 결과를 'Y/M/D W'로 보여줌


ex3) 비교

SELECT * FROM Orders
WHERE WEEKDAY(OrderDate) = 0;

OrderDate에서 요일 정보가 0(월요일)인 것만 보여줌


4. HOUR, MINIUTE, SECOND


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

ex1)

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

NOW를 사용하면 현재 시간이 반환된다.


5. ADDDATE, SUBDATE


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

ex1)

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;


6. DATEDIFF, TIMEDIFF


함수설명
DATEDIFF두 시간/날짜 간 일수차
TIMEDIFF두 시간/날짜 간 시간차

ex1)

SELECT
  OrderDate,
  NOW(),
  DATEDIFF(OrderDate, NOW())
FROM Orders;

OrderDate - NOW() 를 한 일 수가 표시된다.


ex2)

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

2021-06-21 15:20:35 - 2021-06-20 16:34:41 를 한 초가 표시 된다.


7. LAST_DAY


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

ex1)

SELECT OrderDate,
LAST_DAY(OrderDate)
FROM Orders;


8. DATE_FORMAT


함수설명
DATE_FORMAT시간/날짜를 지정한 형식으로 반환

함수설명
%Y년도 4자리
%y년도 2자리
%M월 영문
%m월 숫자
%D일 영문(1st, 2nd, 3rd...)
%d, %e일 숫자 (01 ~31)
%Thh : mm : ss
%rhh : mm : ss AM/PM
%H, %k시 (~23)
%H, %l시 (~12)
%i
%S, %s
%pAM/PM

ex1)

SELECT
 DATE_FORMAT(NOW(), '%M %D, %Y %T'),
 DATE_FORMAT(NOW(), '%y-%m-%d %h:%i"%s %p'),
 DATE_FORMAT(NOW(), '%Y년 %md월 %d일 %p %h시 %i분 %s초');

현재 날짜와 시간을 내가 원하는 표기법 대로 나타낼 수 있다.



기타함수


1.if


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

ex1)

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


2.CASE


함수설명
CASE WHEN 조건a THEN b ELSE c조건a에 해당하면 b를 반환, 그렇치 않으면 c를 반환한다.

ex1)

SELECT
CASE
  WHEN -1 > 0 THEN '-1은 양수다.'
  WHEN -1 = 0 THEN '-1은 0이다.'
  ELSE '-1은 음수다.'
END;


3.IFNULL


함수설명
IFNULL(A,B)A가 NULL일 때 B 출력

ex1)

SELECT
  IFNULL('A', 'B'),
  IFNULL(NULL, 'B');

profile
개린이

0개의 댓글