[얄코] Section 1-4. SELECT 기초 - 원하는 정보 찾기 (시간/날짜 관련 및 기타 함수들)
2023. 4. 17. 16:37ㆍDatabase/갖고노는 MySQL 데이터베이스
4. 시간/날짜 관련 및 기타 함수들
1. 시간/날짜 관련 함수들
함수 |
설명 |
CURRENT_DATE, CURDATE | 현재 날짜 반환 |
CURRENT_TIME, CURTIME | 현재 시간 반환 |
CURRENT_TIMESTAMP, NOW | 현재 시간과 날짜 반환 |
SELECT CURDATE(), CURTIME(), NOW();
CURDATE, CURTIME, NOW는 무조건 () 를 넣어줘야하고,
다른것들은 ()를 넣던 말던 상관없다!
함수 | 설명 |
DATE | 문자열에 따라 날짜 생성 |
TIME | 문자열에 따라 시간 생성 |
SELECT
'2021-6-1' = '2021-06-01', -- 문자로 다른형식
DATE('2021-6-1') = DATE('2021-06-01'), -- DATE로 바꾸었기에 같은 형식
'1:2:3' = '01:02:03', -- 문자로 다른형식
TIME('1:2:3') = TIME('01:02:03'); -- 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'), -- DATE로 동일
TIME('2021-6-1 1:2:3') = TIME('2021-06-01 01:02:03'), -- TIME로 동일
DATE('2021-6-1 1:2:3') = TIME('2021-06-01 01:02:03'), -- DATE와 TIME 비교로 다름!!!!!!!!!!!
DATE('2021-6-1') = DATE('2021-06-01 01:02:03'), -- DATE만 보기에 시간이 있어도 동일!!!
TIME('2021-6-1 1:2:3') = TIME('01:02:03'); -- TIME만 보기에 날짜 있어도 동일!!!
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, -- 1996-07-04
YEAR(OrderDate) AS YEAR, -- 1996
MONTHNAME(OrderDate) AS MONTHNAME, -- July
MONTH(OrderDate) AS MONTH, -- 7
WEEKDAY(OrderDate) AS WEEKDAY, -- 3
DAYNAME(OrderDate) AS DAYNAME, -- Thursday
DAY(OrderDate) AS DAY -- 4
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), -- 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
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분 %s초'),
'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');
출처 : https://www.yalco.kr/@sql/1-4/
'Database > 갖고노는 MySQL 데이터베이스' 카테고리의 다른 글
[얄코] Section 2-1. SELECT 더 깊이 파보기 (쿼리 안에 서브쿼리) (2) | 2023.04.18 |
---|---|
[얄코] Section 1-5. SELECT 기초 - 원하는 정보 찾기 (조건에 따라 그룹으로 묶기) (0) | 2023.04.17 |
[얄코] Section 1-3. SELECT 기초 - 원하는 정보 찾기 (숫자와 문자열을 다루는 함수들) (0) | 2023.04.17 |
[얄코] Section 1-2. SELECT 기초 - 원하는 정보 찾기 (각종 연산자들) (1) | 2023.04.17 |
[얄코] Section 1-1. SELECT 기초 - 원하는 정보 찾기 (SELECT 전반 기능 훑어보기) (0) | 2023.04.14 |