시간/ 날짜 관련 함수들
함수 | 설명 |
---|---|
CURRENT_DATE, CURDATE | 현재 날짜 반환 |
CURRENT_TIME, CURTIME | 현재 시간 반환 |
CURRENT_TIMESTAMP, NOW | 현재 시간과 날짜 반환 |
ex1)
SELECT CURDATE(), CURTIME(), NOW();
함수 | 설명 |
---|---|
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)가 나옴
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');
'2021-6-1 1:2:3' = '2021-06-01 01:02:03'은 문자열이기 때문에 0(FALSE)
DATE() 안에 시간도 들어 갔지만 시간은 무시됨 1(TRUE)
TIME() 안에 날짜도 들어 갔지만 날짜는 무시됨 1(TRUE)
DATE() 와 TIME() 안에 같은 날짜와 시간이 들어 갔지만 각 각 날짜와 시간만 인식 하기 때문에 0(FALSE)
DATE() 안에 한쪽엔 날짜만, 한쪽엔 날짜/시간이 들어갔지만 시간은 무시되서 1(TRUE)
TIME() 도 마찬가지로 날짜는 무시되서 1(TRUE)
SELECT * FROM Orders
WHERE OrderDate BETWEEN DATE('1997-1-1') AND DATE('1997-1-31');
BETWEEN과 DATE()를 사용하여 지정한 날짜 사이에 있는 데이터들을 불러 왔다.
함수 | 설명 |
---|---|
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;
OrderDate에서 년도에 해당하는 정보를 보여줌
OrderDate에서 월에 해당하는 정보를 영문으로 보여줌
OrderDate에서 월에 해당하는 정보를 숫자로 보여줌
OrderDate에서 요일에 해당하는 정보를 숫자로 보여줌
OrderDate에서 요일에 해당하는 정보를 영문으로 보여줌
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(월요일)인 것만 보여줌
함수 | 설명 |
---|---|
HOUR | 주어진 DATETIME의 시 반환 |
MINUTE | 주어진 DATEDTIME의 분 반환 |
SECOND | 주어진 DATETIME의 초 반환 |
ex1)
SELECT
HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
NOW를 사용하면 현재 시간이 반환된다.
함수 | 설명 |
---|---|
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;
함수 | 설명 |
---|---|
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 를 한 초가 표시 된다.
함수 | 설명 |
---|---|
LAST_DAY | 해당 달의 마지막 날짜 |
ex1)
SELECT OrderDate,
LAST_DAY(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 |
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초');
현재 날짜와 시간을 내가 원하는 표기법 대로 나타낼 수 있다.
기타함수
함수 | 설명 |
---|---|
IF(조건, T,F) | 조건이 참이라면 T,거짓이면 F 반환 |
ex1)
SELECT IF (1 > 2, '1는 2보다 크다.', '1은 2보다 작다.');
함수 | 설명 |
---|---|
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;
함수 | 설명 |
---|---|
IFNULL(A,B) | A가 NULL일 때 B 출력 |
ex1)
SELECT
IFNULL('A', 'B'),
IFNULL(NULL, 'B');