728x90
<시간/날짜 관련 함수>
- CURRENT_DATE, CURDATE: 현재 날짜 반환
- CURRENT_DATE, CURTIME: 현재 시간 반환
- CURRENT_TIMESTAMP, NOW: 현재 시간과 날짜 반환 (1900)
- SELECT CURDATE(), CURTIME(), NOW();
- DATE(): 문자열을 날짜로 생성
- TIME(): 문자열을 시간으로 생성
SELECT * FROM orders
WHERE orderdate BETWEEN DATE('1997-1-1') AND DATE('1997-1-31');
>> '1997-1-1'을 날짜로 생성한 것과 '1997-1-31'을 날짜로 생성한 기간 사이에 있는
orders 테이블의 모든 항목을 출력하시오.
<결과>
<날짜 표현 함수>
- YEAR, MONTHNAME, MONTH, WEEKDAY, DAYNAME 년, 월, 일...
SELECT orderdate,
YEAR(orderdate) as 'YEAR',
MONTHNAME(orderdate) as 'MONTHNAME',
MONTH(orderdate) as 'MONTH',
WEEKDAY(orderdate) as 'DAYNAME',
DAYNAME(orderdate) as 'DAY',
DAY(orderdate) as 'DAY'
FROM orders;
>> orders에서 orderdate의 년도를 'YEAR'
orderdate의 영문 월 이름을 'MONTHNAME'
orderdate의 월을 'MONTH'
orderdate의 요일값(숫자)을 'DAYNAME'
orderdate의 요일명을 'DAY'
orderdate의 날짜(일)를 'DAY'로 출력하시오.
<결과>
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'는 날짜로 생성되지 않아 다른 것으로 판단하고
DATE('2021-6-1') = DATE('2021-06-01')는 날짜로 생성되어
'2021-06-01'가 되므로 같다고 판단함.
'1:2:3' = '01:02:03'는 시간으로 생성되지 않아 다르다고 판단하고
TIME('1:2:3') = TIME('01:02:03')는 '01:02:03'으로 생성되어
같다고 판단
<결과>
<날짜 계산>
- 날짜 계산은 꼭 날짜 계산 함수 이용
- ADDDATE(대상, INTERVAL 기간): 시간/날짜를 더하기
- SUBDATE(대상, INTERVAL 기간):: 시간/날짜를 빼기
SELECT
ADDDATE('2024-01-05', INTERVAL 1 YEAR),
ADDDATE('2024-01-05', INTERVAL -2 MONTH),
ADDDATE('2024-01-05', INTERVAL 3 WEEK),
ADDDATE('2024-01-05', INTERVAL -5 DAY),
ADDDATE('2024-01-05', INTERVAL -5 MINUTE),
ADDDATE('2024-01-05 13:01:12', INTERVAL 6 SECOND);
>> '2024-01-05'에서 1년을 더하고,
'2024-01-05'에서 -2월을 더하고 (빼기)
'2024-01-05'에서 3주를 더하고
'2024-01-05'에서 -5를 더하고
'2024-01-05'에서 -5분을 더하고 >> 24:00:00에서 계산
'2024-01-05 13:01:12'에서 6초를 더하기.
<결과>
SELECT orderdate,
ADDDATE(orderdate, INTERVAL 1 YEAR),
ADDDATE(orderdate, INTERVAL -2 MONTH),
ADDDATE(orderdate,INTERVAL 3 WEEK),
ADDDATE(orderdate, INTERVAL -5 DAY)
FROM orders;
>> orders에서 orderdate와
orderdate에서 1년을 더한 값,
orderdate에서 -2월을 더한 값,
orderdate에서 3주를 더한 값,
orderdate에서 -5를 더한 값을 출력해라.
<결과>
- DATEDIFF: 두 날짜 간의 차이
- TIMEDFIFF: 두 시간 간의 차이
- LASTDAY 해당 월의 마지막 날짜
SELECT orderdate,
LASTDAY(orderdate),
DAY(LAST_DAY(orderdate)),
DATEDIFF(LAST_DAY(orderdate), orderdate)
FROM orders;
>> orders에서 orderdate와
orderdate 항목에 해당하는 마지막 월,
orderdate 항목의 해당하는 마지막 월의 날짜,
orderdate 항목에 해당하는 마지막 월와 orderdate의 날짜 차이를 출력하시오.
<시간/날짜 형식 변환>
- DATE_FORMAT: 시간/날짜를 지정한 형식으로 반환
- %Y: 년도 네 자리
- %y: 년도 두 자리
- %M: 영문 월
- %m: 숫자 월
- %D: 영문 일
- %d: 숫자 일
- %T: 시간
- %p: 오전 / 오후
- %h: 12시 기준 시
- %i: 분
- %s: 초
SELECT DATE_FORMAT(NOW(), '%M %D, %Y %T'),
DATE_FORMAT(NOW(), '%Y년 %m월 %d일 %T');
>> 현재 날짜의 '영문 월과 영문 일, 년도 네 자리와 시간'
현재 날짜의 '년도 네 자리 숫자 월 숫자 일 시간'을 출력하시오.
<결과>
SELECT REPLACE(
REPLACE(
DATE_FORMAT(NOW(), '%Y년 %m월 %d일 %p %h시 %i분 %s초'),
'AM', '오전'
),
'PM', '오후'
);
>> 현재 시간의 년도 네자리 년도 숫자 월 숫자 일 오전/오후 시 분 초로 표현하고
'AM'을 '오전'으로 바꾸고 'PM'를 '오후'로 대체해라.
<결과>
<날짜 생성 함수> DATE_FORMAT() 의 반대
- STR_TO_DATE(S,F): S를 F 형식으로 해석해 날짜 생성
- 문자열을 날짜 형태로 바꿈
- DATE('2024년 01월 05일 오후 4시 16분 55초') DATE는 특별한 형식의 문날짜 해석 불가
SELECT STR_TO_DATE('2024-05-04 07:48:52', '%Y-%m-%d %T');
>> '2024-05-04 07:48:52'를 '%Y-%m-%d %T'로 생성해라
<결과>
SELECT
DATEDIFF(
STR_TO_DATE('2024-06-04 07:48:52', '%Y-%m-%d %T'),
STR_TO_DATE('2024-January-01 12:48:52', '%Y-%m-%d %T')
);
>> '2024-January-01 12:48:52' 해석이 안 돼 결과 출력 불가
<결과>
'프로그래밍 언어 > SQL' 카테고리의 다른 글
SQL 함수 간단 실습 :: 서브쿼리 (비상관 커리, 상관 커리) (0) | 2024.01.26 |
---|---|
SQL 함수 간단 실습 :: JOIN (내부 조인, 외부 조인, 셀프 조인) (0) | 2024.01.25 |
SQL 함수 간단 실습 :: 문자열 관련 함수 (0) | 2024.01.23 |
SQL 함수 간단 실습 :: 숫자 관련 함수 (0) | 2024.01.22 |
SQL 함수 간단 실습 :: SELECT문2 (SELECT 사칙연산) (1) | 2024.01.21 |