일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- P/L SQL
- 테이블스페이스
- COUNT
- ORA-00911
- 테이블 찾기
- map
- 날짜포맷
- Toad
- 세미콜론
- 요일출력
- TRUNC
- jstl
- 문자가부적합
- javascript
- simpledateformat
- Index
- Orange
- 옵션
- 날짜구하기
- foreach
- 버튼새로고침
- model
- tablespace
- button태그
- button rerold
- list
- add_month
- LAST_DAY
- 날짜형식
- Today
- Total
개발새발 방이일지
[오라클] 달의 첫 날, 마지막 날 구하기 본문
쿼리를 보다가 적어두면 유용할거 같아서 적어본다.
1. 달의 마지막 날 구하기
오라클에서는 달의 마지막 날을 구할 수 있도록 LAST_DAY 라는 함수를 지원해준다.
-- LAST_DAY(날짜)
LAST_DAY(SYSDATE)
-- 이번달 마지막 날 구하기
SELECT LAST_DAY(SYSDATE)
FROM DUAL;
-- 특정달 마지막 날 구하기
SELECT LAST_DAY('20200201')
FROM DUAL;
위에 적어뒀듯이 특정달의 마지막 날을 구하려고 한다면 날짜를 일까지 다 적어줘야한다. 2월달을 구하려고 LAST_DAY(202002) 이렇게 적으면 오류가 발생한다. 이점 기억하기!
2. 달의 첫 날 구하기
검색해보니 특이하게 LAST_DAY라는 함수는 있으면서 FIRST_DAY 같은 함수는 없었다. 하지만 해결책은 있는법. 함수가 없는 대신 TRUNC를 이용하여 첫날을 구할 수 있었다.
-- 달의 첫날 구하기
TRUNC(SYSDATE, 'MM')
-- 현재 달의 첫날 구하기
SELECT TRUNC(SYSDATE, 'MM')
FROM DUAL;
TRUNC 함수는 보통 소수점 아래를 자를 때 많이 사용한다. 하지만 소수점 아래를 자를 때 뿐만 아니라 다른 옵션들도 가지고 있다. 시간을 초기화 한다거나 일, 월을 초기화할 수가 있다. 예를들어 TRUNC(SYSDATE, 'YYYY')를 쓰면 월이 초기화되서 그 해의 1월1일을 구할 수 있고, 위의 쿼리처럼 TRUNC(SYSDATE,'MM')을 쓰면 일이 초기화되서 해당 달의 1일을 구할 수 있다.
-- YYYY, MM, IW 현재기준(7월) 결과값 보기
-- IW 의 경우 해당 주의 첫 요일의 날짜를 출력(월요일)
SELECT TRUNC(SYSDATE, 'YYYY') AS YEAR -- 결과 : 2020-01-01
, TRUNC(SYSDATE, 'MM') AS MONTH -- 결과 : 2020-07-01
, TRUNC(SYSDATE, 'IW') AS DAY1 -- 결과 : 2020-07-27
, TRUNC(TO_DATE('20200801000000', 'YYYYMMDDHH24MISS'), 'IW') AS DAY2 -- 결과 : 2020-07-27
FROM DUAL;
-- YEAR, MONTH, DAY 로도 사용 가능
-- DAY 의 경우 해당 주의 첫 요일의 날짜를 출력(일요일)
SELECT TRUNC(SYSDATE, 'YEAR') AS YEAR -- 결과 : 2020-01-01
, TRUNC(SYSDATE, 'MONTH') AS MONTH -- 결과 : 2020-07-01
, TRUNC(SYSDATE, 'DAY') AS DAY1 -- 결과 : 2020-07-26
, TRUNC(TO_DATE('20200801000000', 'YYYYMMDDHH24MISS'), 'DAY') AS DAY2 -- 결과 : 2020-07-26
FROM DUAL;
IW나 DAY의 경우 그 주의 첫주를 불러오기 때문에 위의 쿼리에서처럼 8월 1일을 넣어도 해당 주의 첫 요일의 날짜를 출력한다. IW는 그 주의 시작 요일을 월요일로 잡고 DAY는 일요일로 잡는다는 것을 참고하자.
3. 날짜 다루기
추가적으로 몇가지 유용한 함수나 기능들이 있기에 적어본다.
-- 이전달의 첫날 구하기
SELECT ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1) -- 결과값 : 2020-06-01
FROM DUAL;
-- 다음달의 첫날 구하기
SELECT ADD_MONTHS(TRUNC(SYSDATE,'MM'), 1) -- 결과값 : 2020-08-01
FROM DAUL;
-- 이전주의 첫번째 날 구하기
SELECT TRUNC(SYSDATE-7, 'IW') -- 결과값 : 2020-07-20
FROM DUAL;
-- 다음주의 첫번째 날 구하기(일요일 기준)
SELECT NEXT_DAY(SYSDATE, 1) -- 결고값 : 2020-08-02
FROM DUAL;
ADD_MONTHS 는 입력한 날짜에 +, - 한 달의 첫 일을 구한다. 두달 전의 첫날을 구한다면 -2를 해주면 되는것이다.
오라클에서는 NEXT_DAY 함수를 지원해서 기준일자 다음에 오늘 날짜를 구할 수가 있다. 1은 일요일, 2는 월요일 ··· 이 되겠다. 참고로 한글로 적어도 동작한다. NEXT_DAY(SYSDATE, '일') 이라거나 NEXT_DAY(SYSDATE, '일요일') 로 적어도 동작한다. 다만, P/L SQL 툴에서만 그런건지는 모르겠는데 NEXT_DAY(SYSDATE, 'SUN') 이라거나 NEXT_DAY(SYSDATE, 'SUNDAY')가 동작을 안하더라;; 서버에 올라가면 동작할지는 모르겠지만 참고하길..
나중에 내가 참고하려고 정리해두는 것이지만 누군가에게도 유용하게 쓰이길 :)
※ 열심히 공부해 나가는 과정이며 제가 참고하기 위해 만든 스토리이기 때문에 틀린 부분이 있을 수도 있습니다. 만약 틀린 부분이 있다면 댓글 부탁드립니다.
'개발일지 > DB' 카테고리의 다른 글
[DBMS] TOOL 단축키 정보 (0) | 2020.07.31 |
---|---|
[오라클] TABLESPACE (0) | 2020.03.17 |
[오라클] ORA-00911 : 문자가 부적합합니다. (0) | 2019.11.21 |
[Table Set] 테이블 찾기 (0) | 2019.11.09 |
[Table Set] 테이블 생성, 수정, 삭제 (0) | 2019.11.09 |